Java5 中提过了Condition ,该类可以实现线程间的条件控制,废话少说直接来看一个实例。
实例:
启动两根子线程,连同主线程一共3根线程,实现子线程1执行5次切换至子线程2执行5次,再切换至主线程执行5,然后切换至子线程1执行5次,如此往复3次,程序退出。
程序代码:
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 通过Condition来实现线程间的通信 * * @author 吖大哥 * @date May 24, 2014 6:43:26 PM */ public class ThreeConditionTest { public static void main(String[] args) { final Business1 bs = new Business1(); new Thread(new Runnable() { public void run() { for (int i = 0; i < 3; i++) { bs.sub1(i); } } }).start(); new Thread(new Runnable() { public void run() { for (int i = 0; i < 3; i++) { bs.sub2(i); } } }).start(); for (int i = 0; i < 3; i++) { bs.sub3(i); } } } class Business1 { private Lock lock = new ReentrantLock(); private int flag = 1; private Condition c1 = lock.newCondition(); private Condition c2 = lock.newCondition(); private Condition c3 = lock.newCondition(); public void sub1(int i) { lock.lock(); try { while (flag != 1) { try { c1.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 5; j++) { System.out.println("Sub1 第 " + i + " 次执行*****" + j); } flag = 2; c2.signal(); } catch (RuntimeException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void sub2(int i) { lock.lock(); try { while (flag != 2) { try { c2.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 5; j++) { System.out.println("Sub2 第 " + i + " 次执行*****" + j); } flag = 3; c3.signal(); } catch (RuntimeException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void sub3(int i) { lock.lock(); try { while (flag != 3) { try { c3.await(); } catch (InterruptedException e) { e.printStackTrace(); } } for (int j = 0; j < 5; j++) { System.out.println("Sub3 第 " + i + " 次执行*****" + j); } flag = 1; c1.signal(); } catch (RuntimeException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
执行结果:
Sub1 第 0 次执行*****0 Sub1 第 0 次执行*****1 Sub1 第 0 次执行*****2 Sub1 第 0 次执行*****3 Sub1 第 0 次执行*****4 Sub2 第 0 次执行*****0 Sub2 第 0 次执行*****1 Sub2 第 0 次执行*****2 Sub2 第 0 次执行*****3 Sub2 第 0 次执行*****4 Sub3 第 0 次执行*****0 Sub3 第 0 次执行*****1 Sub3 第 0 次执行*****2 Sub3 第 0 次执行*****3 Sub3 第 0 次执行*****4 Sub1 第 1 次执行*****0 Sub1 第 1 次执行*****1 Sub1 第 1 次执行*****2 Sub1 第 1 次执行*****3 Sub1 第 1 次执行*****4 Sub2 第 1 次执行*****0 Sub2 第 1 次执行*****1 Sub2 第 1 次执行*****2 Sub2 第 1 次执行*****3 Sub2 第 1 次执行*****4 Sub3 第 1 次执行*****0 Sub3 第 1 次执行*****1 Sub3 第 1 次执行*****2 Sub3 第 1 次执行*****3 Sub3 第 1 次执行*****4 Sub1 第 2 次执行*****0 Sub1 第 2 次执行*****1 Sub1 第 2 次执行*****2 Sub1 第 2 次执行*****3 Sub1 第 2 次执行*****4 Sub2 第 2 次执行*****0 Sub2 第 2 次执行*****1 Sub2 第 2 次执行*****2 Sub2 第 2 次执行*****3 Sub2 第 2 次执行*****4 Sub3 第 2 次执行*****0 Sub3 第 2 次执行*****1 Sub3 第 2 次执行*****2 Sub3 第 2 次执行*****3 Sub3 第 2 次执行*****4
执行过程分析:
相关推荐
线程通信(Condition)实例,完整的代码文件,你只需要编译运行即可,就可以看看结果,然后分析。
The-present-condition-of-food-safety-in-China-中国食品安全现状.ppt
condition-circle-源码.rar
利用线程间的通信主要是因为当多个线程同时对一个对象进行访问的时候,多个线程之间是一个协助的关系,举个例子就是今天要说的生产这和消费者模型。
光照条件样式转换纸到2020年IEEE智能车辆专题讨论会(IV 2020)接受。 主要框架如下: 根据经验,使用我们的方法训练的车道检测模型证明了在弱光条件下的适应性以及在复杂场景下的鲁棒性。 (在CULane测试装置中可以...
多线程注意:wait()方法的调用要有判定条件常用 while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition } synchronized会影响共享数据,但对其他语句的...
主要介绍了Java编程中实现Condition控制线程通信,简单介绍了Java中控制线程通信的方法,以及对condition的解析和实例,具有一定参考价值,需要的朋友可以了解下。
python 条件同步的使用 条件同步:threading.Condition 多线程同步,python2例程 多线程的同步 多线程情况下最常见的问题之一:数据共享; 当多个线程都要去修改某一个共享数据的时候,需要对数据访问进行同步...
RPA之家转载的RPA全套视频教程,想系统学习RPA的,可以下载该资源学习。在学习的过程中,如果碰到任何问题,也可以在评论区里面交流。
主要介绍了Java使用Condition控制线程通信的方法,结合实例形式分析了使用Condition类同步检测控制线程通信的相关操作技巧,需要的朋友可以参考下
1、ReentrantLock简介 2、ReentrantLock函数列表 3、重入的实现 4、公平锁与非公平锁 5、ReentrantLock 扩展的功能 6
主要介绍了Python线程协作threading.Condition实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Activiti 学习笔记八:排他网关(ExclusiveGateWay)
使用xgboost建模的液压系统状态监测我们将使用各种传感器值并使用xgboost进行测试,对测试液压钻机进行条件监控。 我们的F1得分很高(在所有情况下> 0.94,在两种情况下> 0.99)。 我们还监测了特征重要性,并且该...
JUC(Java Util Concurrent)是Java中用于并发编程的工具包,提供了一组接口和类,用于处理多线程和并发操作。JUC提供了一些常用的并发编程模式和工具,如线程池、并发集合、原子操作等。 JUC的主要特点包括: ...
Make-wait_condition-work-on-openstack-heat-without-admin-role 当您在 openstack (icehouse,juno,kilo) 上使用 heat 并且需要使用 wait_conditions 时,您很快就会遇到流动问题:Resource CREATE failed: ...
race-condition-exploit, 帮助开发web应用程序竞争条件的工具 竞争条件利用帮助开发web应用程序竞争条件的工具用法$ python rc-exploit --helpusage: rc-exploit [-h] [--threads THREADS] plugin.. .Ra
线程并发控制condition 互斥量 多线程写的:生产者、消费者问题
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、操作、应用或认证考试上的各种问题及解决方案。 《Java JDK 7学习笔记》详细介绍了JVM、JRE、Java SE API、JDK与IDE...