博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个线程交替打印1-100
阅读量:5038 次
发布时间:2019-06-12

本文共 1993 字,大约阅读时间需要 6 分钟。

public class Solution2 {    private static final Object lock = new Object();  //表示对象锁    private volatile int index = 1;           //表示要输出的数字    private volatile boolean aHasPrint = false;      //记录A是否被打印过    class A implements Runnable {        @Override        public void run() {            for (int i = 0; i < 50; i++) {                synchronized (lock) {                    while (aHasPrint) {              //如果A已经打印过就进行阻塞                        try {                            lock.wait();                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                    System.out.println("A:" + index);    //A没有打印过则输出A的值                    index++;                   //输出的值增加1                    aHasPrint = true;             //表示A已经打印过                    lock.notifyAll();            //唤醒其它线程执行                }            }        }    }    class B implements Runnable {        @Override        public void run() {            for (int i = 0; i < 50; i++) {                synchronized (lock) {                    while (!aHasPrint) {               //如果A没有打印过则阻塞                        try {                            lock.wait();                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                    System.out.println("B:" + index);  //输出B的值                    index++;                 //计数加一                    aHasPrint = false;          //B打印完了说明新的一轮开始了,将标识为计为A没有打印过                    lock.notifyAll();          //唤醒阻塞线程                }            }        }    }    public static void main(String[] args) {        Solution2 solution2 = new Solution2();        Thread threadA = new Thread(solution2.new A());        Thread threadB = new Thread(solution2.new B());        threadA.start();        threadB.start();    }}

 相关代码 可自行获取

转载于:https://www.cnblogs.com/liwangcai/p/10741644.html

你可能感兴趣的文章
算法时间复杂度
查看>>
二叉树的遍历 - 数据结构和算法46
查看>>
类模板 - C++快速入门45
查看>>
[转载]JDK的动态代理深入解析(Proxy,InvocationHandler)
查看>>
centos7 搭建vsftp服务器
查看>>
RijndaelManaged 加密
查看>>
Android 音量调节
查看>>
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
C# 启动进程和杀死进程
查看>>
tcp实现交互
查看>>
IIS的各种身份验证详细测试
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>