`

两个线程一次打印数字

阅读更多
public class Test {
    private static boolean flag = true;
    private static final Object LOCK = new Object();
    private static int i=0;
    public static void print(String name){
        i++;
        System.out.println(name+"------"+i);
    }
    public static void main(String[] args) {
        // 两个线程 交替打印字符串
        Thread a = new Thread() {
            public void run() {
                while (i < 100)
                    synchronized (LOCK) {
                        {
                            if (false == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = false;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        Thread b = new Thread() {
            public void run() {
                while (1<100)
                    synchronized (LOCK) {
                        {
                            if (true == flag) {
                                try {
                                    LOCK.wait();// 在wait后的瞬间线程b得到锁
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                            flag = true;
                            print(getName());
                            LOCK.notify();// 在这里虽然唤醒了另一个线程b,但锁并没有释放
                        }
                    }
            };
        };
        a.start();
        b.start();
    }
}

 

分享到:
评论

相关推荐

    多线程 打印1-99,100-199

    1. 实现一个类ThreadMock(模拟线程),用来模仿Thread类,该类具有以下特征: a) Public class ThreadMock implents ...例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。。。。。。。。依此类推。

    java实验4.doc

    假设两个窗口同时出售一次列车的车票,车票就是共享资源,两个窗口就是两个线程。 3、编写程序,实现线程间的同步控制。假设有一个生产者(Producer),一个消费者(Consumer)。生产者产生0~9的整数,将它们存储在...

    使用继承Thread类的方式定义两个线程,.txt

    请使用继承Thread类的方式定义两个线程,一个线程可以计算1--100所有数字的累加和,另一个线程可以计算1--1000所有数字的累加和,每个线程计算完毕后各自打印计算结果,格式例如:”xxx线程计算1--100的累加和,结果...

    线程练习题2

    实现两个线程,一个线程打印1-52,另一个线程打印A-Z,要求输出的结果如下: 1 2 A 3 4 B 5 6 C 7 8 D 9 10 11 12 ... 52 E F G H I J K ... X Y Z 即:当数字小于9时,数字和字母交替打印; 当数字大于等于9时,先把...

    Java实现多线程轮流打印1-100的数字操作

    主要介绍了Java实现多线程轮流打印1-100的数字操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    多线程

    1) 第一个线程打印a字母100次 2) 第二个线程打印b字母100次 3) 第三个线程打印1~100的整数 采用继承Thread类的方式实现; 2. 利用Runnable接口实现与第1题相同的功能; 3. 测试一个Applet小应用程序,体会多线程...

    线程练习题

    利用线程的通信机制,用两个线程打印以下的结果: 1 2 A 3 4 B 5 6 C 7 8 D ... 49 50 Y 51 52 Z 即:数字和字母交替打印;

    python使用threading.Condition交替打印两个字符

    这个程序涉及到两个线程的的协调问题,两个线程为了能够相互协调运行,必须持有一个共同的状态,通过这个状态来维护两个线程的执行,通过使用threading.Condition对象就能够完成两个线程之间的这种协调工作。...

    output_线程_

    有关于一个线程测试,能各更好理解线程的意思。疯狂的打印机。分别使用线程和Runnable编写具有两个相同功能的线程,打印从1-1000的数字。

    multithreading:解决Java中最著名的多线程问题

    一个线程打印0,然后等待其他线程之一打印自己的数字,第二个线程仅打印偶数,第三个线程仅打印奇数) H20(一个线程产生一个氢原子,第二个线程产生一个氧原子。我们想要获得正确的水分子),以及在多线程任务中...

    TwoThread.java

    创建两个线程,打印数字与字母,简单示例。

    thread-id:在Rust中获得唯一的线程ID

    线程ID 获取Rust中当前线程的唯一ID。... 这将打印两个不同的数字。 执照 您可以选择根据或对Thread-ID进行许可。 它可以在免费软件以及闭源应用程序中使用,可以在许可证规定的条件下用于商业和非商业用途。

    多线程:“等待唤醒”编程题

    主线程中:休息2秒,让两个线程全部执行完毕,打印“计数器”的结果。 我的代码: &gt; public class WaitNotifyDemo { &gt; static int cnt = 0;//用于次数统计 &gt; &gt; public static void main(String[] args) { &gt; //设置锁...

    API之网络函数---整理网络函数及功能

    CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台 CreateFileMapping 创建一个新的文件映射对象 ...

    customcode:至

    该存储库具有以下内容 java / src 具有java.util.concurrent。*构造的自定义实现 CountDownLatch 循环屏障 换货商 重入锁 ...使用两个线程删除列表中的奇数,偶数 同步队列 其他 面试问题及其解决方案

    operating-systems:纽约大学操作系统课程的编程作业

    第一个程序receiver.c 在无限循环中运行,一次一行接收来自用户的字母数字字符串作为输入。 从标准输入读取一行后,该程序将此信息发送给另一个程序。 两个进程之间的数据共享应该通过共享内存进行。 第二个程序...

    多线程leetcode-leetcode:2020年8月

    两个数字相加 8/12 21 合并两个排序列表 8/12 23 合并 k 个排序列表 8/12 动态规划 ID 名称 日期 887 超级蛋滴 8/14 53 最大子阵列 11/15 细绳 ID 名称 日期 1542 找到最长的真棒子串 8/15 1457 二叉树中的伪回文...

    达内 coreJava 习题答案

    规律:一个数等于前两个数之和 //计算斐波那契数列(Fibonacci)的第n个值 public class Fibonacci{ public static void main(String args[]){ int n = Integer.parseInt(args[0]); int n1 = 1;//第一个数 int n2...

    最新Java面试宝典pdf版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 36 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序...

    Java面试宝典2010版

    55、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 56、子线程循环10次,接着主线程循环100,接着又回到子线程循环10次,接着再回到主线程又循环100,如此循环50次,请写出程序。 ...

Global site tag (gtag.js) - Google Analytics