java多线程学习之Condition,实现唤醒指定的部分线程
来源:互联网 发布:贪心算法实例 编辑:程序博客网 时间:2024/05/17 15:36
package learn.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/*Condition,实现唤醒指定的部分线程 */public class Demo15 { static Lock lock = new ReentrantLock(); static int count = 0; static Condition conditionA = lock.newCondition();// 必须配合lock.lock()使用 static Condition conditionB = lock.newCondition();// 必须配合lock.lock()使用 public static void main(String[] args) { Thread t1 = new Thread() { @Override public void run() { lock.lock(); if (count < 5) { System.out.println("线程1未达到业务要求,暂停中,等待线程2处理到达到要求后唤醒"); try { conditionA.await();// 暂停线程并释放锁 System.out.println("conditionA被唤醒"); conditionB.await(); System.out.println("conditionB被唤醒"); System.out.println("我是线程1后面的代码"); } catch (InterruptedException e) { e.printStackTrace(); } } lock.unlock(); } }; Thread t2 = new Thread() { @Override public void run() { lock.lock(); while (count < 10) { count++; System.out.println("线程2业务处理中: " + count); try { Thread.sleep(1000); if (count == 5) { conditionA.signal(); System.out.println("唤醒线程1"); lock.unlock();// 调用signal()方法后,线程2并不会释放锁,需要手动释放线程2才会执行 } } catch (InterruptedException e) { e.printStackTrace(); } } try { lock.lock();// 不加这个会报java.lang.IllegalMonitorStateException System.out.println("等待3秒后conditionB会被唤醒"); Thread.sleep(3000); conditionB.signal(); } catch (InterruptedException e) { e.printStackTrace(); } lock.unlock();// 这里释放锁,线程2执行完,线程1才会执行 } }; t1.start(); t2.start(); }}// 线程1未达到业务要求,暂停中,等待线程2处理到达到要求后唤醒// 线程2业务处理中: 1// 线程2业务处理中: 2// 线程2业务处理中: 3// 线程2业务处理中: 4// 线程2业务处理中: 5// 唤醒线程1// 线程2业务处理中: 6// conditionA被唤醒// 线程2业务处理中: 7// 线程2业务处理中: 8// 线程2业务处理中: 9// 线程2业务处理中: 10// 等待3秒后conditionB会被唤醒// conditionB被唤醒// 我是线程1后面的代码
阅读全文
0 0
- java多线程学习之Condition,实现唤醒指定的部分线程
- Java使用Condition唤醒指定线程
- Java多线程之Condition接口的实现
- Java多线程之Condition接口的实现
- Java多线程之Condition接口的实现
- java多线程之Condition实现更高效线程通信
- java线程学习之Condition
- java多线程学习之线程通信-wait()等待 notify()唤醒
- 多线程之Java线程阻塞与唤醒
- 多线程之Java线程阻塞与唤醒
- JAVA多线程之Condition
- Java多线程之Condition
- Java基础12天 学习笔记_多线程(线程间的通信,生产消费者,等待唤醒机制,while+notifyAll,lock+condition,interrupt()+异常中改变flag值,守护,join
- java多线程之Condition的使用
- java多线程之Condition的使用
- 多线程之8 -------Condition 实现线程同步通信
- JAVA多线程—Lock&Condition实现线程同步通信
- Java 多线程 (PART XIX) 使用Condition实现线程的顺序执行
- 详解设计模式——外观模式
- [Qt]Qt--拖拽实现
- xcodebuild和xcrun实现自动打包iOS应用程序
- BZOJ 1588 营业额统计(TREAP)
- ffplay音视频同步分析(一)
- java多线程学习之Condition,实现唤醒指定的部分线程
- TensorFlow学习笔记(八): Google 的开源技术protobuf 简介
- at java.io.ObjectOutputStream.writeObject0(Unknown Source)
- C++学习(21)
- HTC Link是仅适用于日本的6DOF VR头显
- java多线程学习之ReentrantReadWriteLock(一)
- Kotlin资料积累,Kotlin搞起来
- 数据库基本语句小结
- 跨进程的双向通信