《黑马程序员》Lock&Condition练习
来源:互联网 发布:linux rpm 安装文件 编辑:程序博客网 时间:2024/05/18 14:43
public class ConditionCommuncationTest3 {/** * 子线程循环10次,接着主线程循环100,接着又回到子线程循环10次, * 接着再回到主线程又循环100,如此循环50次,请写出程序。 * 假设我们这里有三个线程。即两个子线程一个主线程 */public static void main(String[] args) {final Business busi = new Business();// 子线程new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 50; i++) {busi.sub(i); // 调用相关联的类身上的方法}}}).start();new Thread(new Runnable() {@Overridepublic void run() {for (int i = 1; i <= 50; i++) {busi.sub2(i); // 调用相关联的类身上的方法}}}).start();// 主线程for (int i = 1; i <= 50; i++) {busi.main(i); // 调用相关联的类身上的方法}}static class Business {// 创建一个可重入的锁private Lock lock = new ReentrantLock();// Condition是基于Lock的private Condition condition1 = lock.newCondition(); //通知第一个线程private Condition condition2 = lock.newCondition(); //通知第二个线程private Condition condition3 = lock.newCondition(); //通知第三个线程private int shoudleExecute = 1; // 默认是主线程先执行任务public void sub(int i) { /*2*/lock.lock(); // 开启锁try {if (shoudleExecute != 2) {try {condition2.await(); // 通知当前的线程进入等待状态} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 10; j++) {System.out.println("sub thread sequence of:" + j+ ",loop of:" + i);}shoudleExecute = 3;condition3.signal(); // 激活处于等待的线程} catch (Exception e) {} finally {lock.unlock(); // 释放锁}}public void sub2(int i) { /*3*/lock.lock(); // 开启锁try {if (shoudleExecute != 3) {try {condition3.await(); // 通知当前的线程进入等待状态} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 10; j++) {System.out.println("sub2 thread sequence of:" + j+ ",loop of:" + i);}shoudleExecute = 1;condition1.signal(); // 激活处于等待的线程} catch (Exception e) {} finally {lock.unlock(); // 释放锁}}public void main(int i) { /*1*/lock.lock();try {if (shoudleExecute != 1) {try {// this.wait();condition1.await();} catch (InterruptedException e) {e.printStackTrace();}}for (int j = 1; j <= 100; j++) {System.out.println("main thread sequence of:" + j+ ",loop of:" + i);}shoudleExecute = 2;condition2.signal();} catch (Exception e) {} finally {lock.unlock();}}}}
0 0
- 《黑马程序员》Lock&Condition练习
- 黑马程序员---Lock和Condition
- 黑马程序员——Lock锁与Condition
- 黑马程序员-java5的线程锁技术Lock,Condition
- 多线程练习-synochronized-notify/wait-lock/condition
- 黑马程序员 利用Lock Condition解决多生产者多消费者问题的实例
- 黑马程序员:线程间通信介绍:wait()、notify()、Lock、Condition等介绍
- 黑马程序员——Java5中的线程并发库(一)---概述、线程池、Callable和Future、Lock和Condition
- Lock-Condition
- Lock & Condition
- Lock、Condition
- Lock & condition
- 黑马程序员--练习
- 黑马程序员-GUI练习
- 黑马程序员 ----------- 代码练习
- 黑马程序员 for练习
- 黑马程序员-----异常练习
- 黑马程序员-----练习
- 数据结构之链表排序
- EXTJS4:在grid中加入合计行
- SELECT FOR UPDATE(转)
- 内外有别!
- Spring事务配置的五种方式
- 《黑马程序员》Lock&Condition练习
- Oracle 删除用户和表空间
- solr4.7学习(1)安装
- JAVA日志记录工具jbing.log-0.0.2.jar下载地址
- 第四周作业
- 【LeetCode】LRU Cache
- python unittest TestCase间共享数据(全局变量的使用)
- sublime text
- 关于项目中svnupdate时发生locked的问题解决