目录
原题+官方解析
单选题
3.当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?
A. CountDownLatch
B. CyclicBarrier
C. Semaphore
D. Future
正确答案:B
官方解析:暂无官方题目解析,去讨论区看看吧!
个人解析
本题主要就是考察关键字的作用,所以我们分别讲解一下这四个关键字的作用
1.CountDownLatch
CountDownLatch是等待一组线程执行完毕,在进行其他操作
1.通过CountDownLatch(int count)构造方法创建一个类,count是这一组线程的个数
2.当这组内的某一条线程执行完毕,通过countdown()方法反馈回去
3.在等待的位置用await()方法进行等待,当这组线程执行完毕,停止等待
所以这是等待一组线程执行完毕,而不是题目中的所有线程执行到某一处,继续进行下面代码
2.CyclicBarrier
等待某一组线程执行到某个状态,在进行操作
他与CountDownLatch的区别就在于,CountDownLatch是线程执行完毕,而CyclicBarrier是线程没执行完毕,而是卡在某一处进行等待
3.Semaphore
作用在于可以控制访问特定资源的线程数
Semaphore就相当与一个通行证,而通行证数量是有限的.
比如这样一个场景:当一个景点只能容纳1000人的时候,只有里面的人出来,外面多的人才能进去,他可通行的人数是有限的.所以只有如果景区超过1000人,那么就只能等待里面的人出去.
Semaphore的意思就是这样,对线程数量进行控制,如果线程数过多,就需要排队等待其他线程结束,才可以继续新的线程的执行
4.Future
Future代表的是异步执行的结果,意思是当异步执行结束之后,返回的结果将会保存在Future中。
也就是我们在做一件很长时间的事情的时候,就可以在这个时间去做点别的事情,等长时间的任务执行完毕,在返回其结果.
综上所述
只有AB选项容易使我们产生错误,而AB的区别就是执行完毕和执行到某一状态!