栅栏 java,java栅栏实现原理
00-1010话题描述-阻挡话题解题思路代码详解话题2描述:栅栏话题解题思路代码详解
目录
00-1010有三个线程,线程A和线程B并行执行,线程C需要和线程A、B一起执行才能执行。它是通过锁定CountDownLatch实现的。
00-1010创建课程:Abc测试
CountDownLatch初始化值为2
加一个B线程。在线程中执行逻辑后,计算-1。
countDownLatch.countDown()
添加线程c,等待线程a和线程b完成。
countdownlatch . await();
执行相关逻辑
题目描述 -闭锁
ABC测试:
包cn . xiuxu Zhu . daily;导入Java . util . concurrent . countdownlatch;public类AbcTest { public static void main(String[]args){ CountDownLatch CountDownLatch=new CountDownLatch(2);//Thread A new Thread(newrunnable(){ @ override public void run(){ try { Thread . sleep(2000));} catch(interrupted exception e){ e . printstacktrace();} system . out . println(thread . current thread()。getname () 3360 线程A执行结束);countdownlatch . count down();}},线程A )。start();//thread bnewthread(newrunnable(){ @ override public void run(){ try { thread . sleep(1000));} catch(interrupted exception e){ e . printstacktrace();} system . out . println(thread . current thread()。getname () 3360 线程B执行结束);countdownlatch . count down();}},‘线程B’)。start();new Thread(new Runnable(){ @ Override public void run(){ try { countdownlatch . await();} catch(interrupted exception e){ e . printstacktrace();} system . out . println(thread . current thread()。getname () 3360 线程C执行结束);countdownlatch . count down();}},‘线程C’)。start();}}
00-1010
题目
有3个线程,线程A和线程B并发执行,线程C需要A和B完成后才能执行。通过删除列CyclicBarrier实现
00-1010防护类似于阻塞,可以阻塞一组线程,直到事件发生。与栅栏锁定的关键区别在于所有线程
同时你必须到达围栏的位置才能继续。
创建一个类别:Abc Test2。
CyclicBarrier初始化值为3。
添加a和b线程。在线程中执行逻辑之后,栅栏等待。只有当三个线程都到达栅栏时,它们才能被执行。
cyclic barrier . wait();
添加线程C,先在栅栏处等待,当线程A和B到达栅栏时,一起执行。
解题思路
套餐cn。朱秀旭。日常;导入Java。util。并发。brokenbarrierexception导入Java。util。并发。环状屏障;/** *描述:有3个线程。线程A和线程B并行执行,线程C需要A和B执行完成后才能执行。可以怎么实现?* * @作者小王同学* @ 1.0版* @Description: */public类ABC test 2 { public static void main(String[]args){ cyclic barrier cyclic barrier=new cyclic barrier(3);//线程一个新线程(new Runnable(){ @ Override public void run(){ try { Thread。睡眠(2000));} catch(中断异常e){ e . printstacktrace();}系统。出去。println(线程。当前线程().getName() : 线程A执行结束);请尝试{环状屏障。await();//符合三个线程都到达栅栏才往下执行} catch(中断异常e){ e . printstacktrace();} catch(BrokenBarrierException e){ e . printstacktrace();} } },线程a’).start();//线程b新线程(new Runnable(){ @ Override public void run(){ try { Thread。睡眠(1000));} catch(中断异常e){ e . printstacktrace();}系统。出去。println(线程。当前线程().getName() : 线程B执行结束);请尝试{环状屏障。await();//符合三个线程都到达栅栏才往下执行} catch(中断异常e){ e . printstacktrace();} catch(BrokenBarrierException e){ e . printstacktrace();} } },线程b).start();//线程c新线程(new Runnable(){ @ Override public void run(){//等待甲,乙线程完成请尝试{环状屏障。await();//符合三个线程都到达栅栏才往下执行} catch(中断异常e){ e . printstacktrace();} catch(BrokenBarrierException e){ e . printstacktrace();}系统。出去。println(线程。当前线程().getName() : 线程C执行结束);} },线程c’).start();}}到此这篇关于一文详解爪哇闭锁和栅栏的实现的文章就介绍到这了,更多相关爪哇闭锁栅栏内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。