首页 > 编程语言 > 详细

JAVA多线程按指定顺序执行线程 Condition应用

时间:2019-08-01 18:05:26      阅读:102      评论:0      收藏:0      [点我收藏+]
package concurrent; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; /** * Auth: zhouhongliang * Date:2019/8/1 * 线程等待与唤醒机制 Condition * 按指定顺序执行线程 */ public class ConditionDemo { public static void main(String[] args) { //声明重入锁 ReentrantLock reentrantLock = new ReentrantLock(); //声明Condition对象 final Condition condition1 = reentrantLock.newCondition(); final Condition condition2 = reentrantLock.newCondition(); final Condition condition3 = reentrantLock.newCondition(); new Thread(() -> { //加锁 reentrantLock.lock(); try { //等待 condition1.await(); System.out.println("AA"); } catch (InterruptedException e) { e.printStackTrace(); } finally { //解锁 reentrantLock.unlock(); } }).start(); new Thread(() -> { reentrantLock.lock(); try { condition2.await(); System.out.println("BB"); condition1.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { reentrantLock.unlock(); } }).start(); new Thread(() -> { reentrantLock.lock(); try { condition3.await(); System.out.println("CC"); condition2.signal(); } catch (InterruptedException e) { e.printStackTrace(); } finally { reentrantLock.unlock(); } }).start(); new Thread(() -> { reentrantLock.lock(); try { System.out.println("DD"); //唤醒 condition3.signal(); } catch (Exception e) { e.printStackTrace(); } finally { reentrantLock.unlock(); } }).start(); } }

输出结果:
DD
CC
BB
AA

Process finished with exit code 0

JAVA多线程按指定顺序执行线程 Condition应用

原文:https://blog.51cto.com/11147669/2425610

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!