用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
来源:互联网 发布:twostepsfromhell知乎 编辑:程序博客网 时间:2024/06/05 14:35
package test1;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次 * * 设计思想: * 业务类Business中,设计3个方法,每个方法代表主、子、孙 * 主方法中执行5次 * 子方法中执行10次 * 孙方法中执行15次 * * 用lock锁住各自方法,然后用runFlag来判断是否自己执行,如果不是,则await,如果走完,则把runFlag设为下一个要执行的对象 * 然后用condition来唤醒下一线程 * */public class CommunicationTest3 {public static void main(String[] args) {final Business2 business = new Business2();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 5; i++) {business.sub2(i);}}}){}.start();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 0; i < 5; i++) {business.sub3(i);}}}){}.start();for (int i = 0; i < 5; i++) {business.sub(i);}}}class Business2 {private int runFlag = 1;private Lock lock = new ReentrantLock();Condition c1 = lock.newCondition();Condition c2 = lock.newCondition();Condition c3 = lock.newCondition();public void sub(int i) {lock.lock();try {if (runFlag != 1) {try {c1.await(); // 如果不是sub1执行时,让出CPU} catch (Exception e) {e.printStackTrace();}}for (int j = 0; j < 5; j++) {System.out.println("sub1-" + i + "下的" + j + "次");}runFlag = 2; // 执行完后,让sub执行c2.signal();} finally {lock.unlock();}}public void sub2(int i) {lock.lock();try {if (runFlag != 2) {try {c2.await(); // 如果不是sub2该执行时,让出CPU} catch (Exception e) {e.printStackTrace();}}for (int j = 0; j < 10; j++) {System.out.println("sub2-" + i + "下的" + j + "次");}runFlag = 3; // 执行完后,让sub执行c3.signal();} finally {lock.unlock();}}public void sub3(int i) {lock.lock();try {if (runFlag != 3) {try {c3.await(); // 如果不是sub3该执行时,让出CPU} catch (Exception e) {e.printStackTrace();}}for (int j = 0; j < 15; j++) {System.out.println("sub3-" + i + "下的" + j + "次");}runFlag = 1; // 执行完后,让sub1执行c1.signal();} finally {lock.unlock();}}}
阅读全文
0 0
- 用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
- 子线程先执行10次,主线程执行5次,子线程再执行10次,主线程再执行5次,如此反复3次
- 子线程循环10次 主线程循环100次 然后如此反复50次
- java 线程通讯 主线程运行10次接着子线程运行5次,如此反复运行20次代码实现
- 子线程先运行10次 ,主线程再运行10次,如此反复的运行20次
- java线程面试题之--两个线程,子线程10次,主线程5次,子线程10次,主线程5次,如此往复50次
- 子线程循环10次,主线程执行100次,紧接着子线程执行10次,再执行主线程 如此往复50次。子线程循环的时候主线程不能打扰,相同的是主线程执行循环的时候子线程也不能打扰
- java多线程 典型案例:子线程执行10次,主线程执行100次,两者交替50次
- 线程通信(子线程运行10次,主线程运行100次,如此循环50次)[用condition替代wait,notify等待和唤醒操作]
- 线程同步通信技术(四)子线程10次与主线程100次来回循环执行50次
- 主线程执行10,子线程执行10.交替执行50次结束
- 子线程循环10次,接着主线程循环5次,接着又回到子线程循环10次,接着再回到主线程又循环5次,如此循环50次,请写出程序。
- 主线程先循环20次,接着子线程循环10次,如此周而复始50次
- c++实现子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次
- 子线程和主线程业务依次执行循环50次
- 线程执行N次后,进程执行M次,如此循环S次
- 传统线程通信(子线程运行10次,主线程运行100次,如此循环50次)
- 关于java线程的经典面试题。主线程子线程交替执行n次
- 4线程,2个对i加,2个对i减
- Reserved-7
- 通过代码,解释ExecutorService基本用法
- Reserved-8
- 学习:常用的数据适配器之PageAdapter
- 用Lock和Condition,实现主线程执行5次,子线程再执行10次,孙线程执行15次,如此反复5次
- Reserved-9
- jsp页面练习
- 用锁实现缓存机制
- Reserved-10
- 通过semaphore信号灯,开启多个线程,但只并发3个线程
- Reserved-11
- micropython之动手搭建自己的MQTT服务器并实现通信(点亮led)
- 每隔一秒打印一次日志,共16秒打印完,加4个线程修改程序,使之4秒打印完