小例子:创建三个线程A,B,C, A线程循环10次,接着B线程再循环10次,然后C线程再循环10次,然后A线程又循环10次,如此循环往复50次。
代码如下:
public class ThreeThreadCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub1(i); } } }).start(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub2(i); } } }).start(); new Thread(new Runnable() { @Override public void run() { for(int i = 1; i <= 50; i++){ business.sub3(i); } } }).start(); } } class Business{ Lock lock = new ReentrantLock(); Condition condition1 = lock.newCondition(); Condition condition2 = lock.newCondition(); Condition condition3 = lock.newCondition(); private int flag = 1; public void sub1(int j){ lock.lock(); try{ while(flag != 1){ condition1.await(); } for(int i = 1;i <= 10;i++){ System.out.println("sub1 thread sequence of " + i + ",loop of " + j); } flag = 2; condition2.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub2(int j){ lock.lock(); try{ while(flag != 2){ condition2.await(); } for(int i = 1; i <= 10; i++){ System.out.println("sub2 thread sequence of " + i + ",loop of " + j); } flag = 3; condition3.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } public void sub3(int j){ lock.lock(); try{ while(flag != 3){ condition3.await(); } for (int i = 1; i <= 10; i++) { System.out.println("sub3 thread sequence of " + i + ",loop of " + j); } flag = 1; condition1.signal(); } catch (Exception e) { e.printStackTrace(); }finally{ lock.unlock(); } } }
相关推荐
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的...
Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...
.......................................JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不扣分,回帖加1分,欢迎下载,童叟无欺JAVA线程、线程池资料----下载不...
Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-守护线程 Java线程:线程的...
java线程的状态3---马克-to-win java视频的详细描述与介绍
java线程学习笔记
尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于...
Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点...Java多线程与
Java线程:线程的同步与锁 一、同步问题提出 二、同步和锁定 三、静态方法同步 四、如果线程不能不能获得锁会怎么样 五、何时需要同步 六、线程安全类 七、线程死锁 八、线程同步小结 Java线程:线程的交互...
JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...
java线程的状态1---马克-to-win java视频的 详细描述介绍
java线程的状态3---马克-to-win java视频的详细描述与介绍
java线程的状态4---马克-to-win java视频的详细描述与介绍