Java多线程编程4--Lock的实例--顺序打印
来源:互联网 发布:淘宝男风时尚生活假货 编辑:程序博客网 时间:2024/06/05 18:55
使用Condition对象可以对线程执行的业务进行排序规划
public class Run { private volatile static int nextPrintWho = 1; private static ReentrantLock lock = new ReentrantLock(); private final static Condition conditionA = lock.newCondition(); private final static Condition conditionB = lock.newCondition(); private final static Condition conditionC = lock.newCondition(); public static void main(String[] args) throws InterruptedException { Thread threadA = new Thread(){ public void run() { try { lock.lock(); while (nextPrintWho != 1) { conditionA.await(); } for (int i=0; i<3; i++) { System.out.println("ThreadA " + (i+1)); } nextPrintWho = 2; conditionA.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }; Thread threadB = new Thread(){ public void run() { try { lock.lock(); while (nextPrintWho != 2) { conditionB.await(); } for (int i=0; i<3; i++) { System.out.println("ThreadB " + (i+1)); } nextPrintWho = 3; conditionB.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }; Thread threadC = new Thread(){ public void run() { try { lock.lock(); while (nextPrintWho != 3) { conditionC.await(); } for (int i=0; i<3; i++) { System.out.println("ThreadC " + (i+1)); } nextPrintWho = 1; conditionC.signalAll(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }; Thread[] aArray = new Thread[5]; Thread[] bArray = new Thread[5]; Thread[] cArray = new Thread[5]; for (int i=0; i<5; i++) { aArray[i] = new Thread(threadA); bArray[i] = new Thread(threadB); cArray[i] = new Thread(threadC); aArray[i].start(); bArray[i].start(); cArray[i].start(); } }}ThreadA 1
ThreadA 2
ThreadA 3
ThreadB 1
ThreadB 2
ThreadB 3
ThreadC 1
ThreadC 2
ThreadC 3
ThreadA 1
ThreadA 2
ThreadA 3
ThreadB 1
ThreadB 2
ThreadB 3
ThreadC 1
ThreadC 2
ThreadC 3
ThreadA 1
ThreadA 2
ThreadA 3
ThreadB 1
ThreadB 2
ThreadB 3
ThreadC 1
ThreadC 2
ThreadC 3
......按顺序打印
0 0
- Java多线程编程4--Lock的实例--顺序打印
- Java多线程编程4--Lock的实例--实现生产者/消费者模式:一对一、多对多交替打印
- Java多线程编程7--实例--顺序打印3次ABC
- JAVA Lock 多线程顺序执行
- Java多线程编程4--Lock的使用--重入锁(ReentrantLock)、Condition
- Java多线程编程4--Lock的使用--相关方法
- 《java多线程编程核心技术》读书笔记4:Lock的使用
- java多线程编程核心技术4-Lock的使用
- Java Thread顺序打印123----Lock
- 练习:利用多线程 按照顺序将 ABC 打印十遍 ,体会 lock 和 condition 的用法
- java多线程的编程实例
- java多线程顺序打印ABC
- java 多线程顺序打印ABC
- 《java多线程编程核心技术》核心笔记(三) Lock的使用
- 《Java多线程编程核心技术》(四)Lock的使用
- Java多线程编程核心技术--Lock的使用(一)
- Java多线程编程核心技术(第四章Lock的使用)
- 【java多线程编程核心技术】4.Lock的使用-笔记总结
- Hadoop简单入门之伪分布式搭建
- utilities(matlab)—— 多元函数的数值梯度
- 使用JAXB完成object和xml的转换
- 【Codevs】1082 线段树练习 3 && 线段树模板
- Android学习第十周_传感器和LBS
- Java多线程编程4--Lock的实例--顺序打印
- LeetCode 71. Simplify Path
- getRequestDispatcher()用法介绍
- per_cpu机制的详解
- Git的纯命令操作,Install,Clone , Commit,Push,Pull,版本回退,撤销更新,分支的创建/切换/更新/提交/合并,代码冲突
- linux
- 3001
- Linux大文件的切割与合并
- Jenkins——应用篇——插件使用——Extended E-mail Notification Plugin