CountDownLatch,CyclicBarrier,Semaphore
来源:互联网 发布:天视6.3监控软件 编辑:程序博客网 时间:2024/06/07 09:54
首先 说下 3者个人理解的区别:
CountDownLatch:个人感觉他的功能是 有一个线程 中 开启了多个线程,然后这个线程要等待开启的所有线程结束后才能继续执行。
CyclicBarrier:个人感觉就是多个线程运行到一个点然后等待多个线程都运行到那个点的时候 所有线程继续一起执行 类似于赛跑
Semaphore:就是用来控制一个资源可以同时被几个人访问的 有点类似于锁
CountDownLatch列子:
package thred;import java.util.concurrent.CountDownLatch;public class MyCountDownLatchThread implements Runnable{private CountDownLatch latch;private String i;public MyCountDownLatchThread(CountDownLatch latch, String i) {super();this.latch = latch;this.i = i;}@Overridepublic void run() {System.out.println("第"+i+"个线程准备run");try {Thread.sleep(10000);} catch (Exception e) {}System.out.println("第"+i+"个线程结束run");latch.countDown();}}
package thred;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/** * CountDownLatch的使用 * @author djk * */public class MyCountDownLatchTest{public static void main(String[] args) throws InterruptedException {ExecutorService saveExec = Executors.newFixedThreadPool(5);CountDownLatch latch = new CountDownLatch(5);for (int i =0;i<5;i++){saveExec.execute(new MyCountDownLatchThread(latch, i+""));}System.out.println("开始等待");latch.await();System.out.println("都结束了啊");}}
CyclicBarrier列子:
package thred;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class MyCyclicBarrierThrad implements Runnable{private int i;private CyclicBarrier cyclicBarrier;public MyCyclicBarrierThrad(int i, CyclicBarrier cyclicBarrier) {super();this.i = i;this.cyclicBarrier = cyclicBarrier;}@Overridepublic void run() {System.out.println("第"+i+"个任务准备好了。。。。");try {Thread.sleep(3000);} catch (Exception e) {// TODO: handle exception}try {cyclicBarrier.await();} catch (InterruptedException | BrokenBarrierException e){// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("都准备好了啊 冲啊");}}
package thred;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MyCyclicBarrierTest {public static void main(String[] args) {ExecutorService saveExec = Executors.newFixedThreadPool(5);CyclicBarrier cyclicBarrier = new CyclicBarrier(5);for (int i =0;i<5;i++){saveExec.execute(new MyCyclicBarrierThrad(i, cyclicBarrier));}System.out.println("呵呵 哥先走");}}
Semaphore列子:
package thred;import java.util.concurrent.Semaphore;public class MySemaphoreThread implements Runnable{private String i;private Semaphore semaphore;public MySemaphoreThread(String i, Semaphore semaphore) {super();this.i = i;this.semaphore = semaphore;}@Overridepublic void run() {try{semaphore.acquire();System.out.println("工人:"+i+"获得锁 。。。。开始工作");Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("工人:"+i+"准备释放锁");semaphore.release();}}
package thred;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;public class MySemaphoreTest {public static void main(String[] args) {ExecutorService saveExec = Executors.newCachedThreadPool();Semaphore semaphore = new Semaphore(3);for (int i =0;i<8;i++){saveExec.execute(new MySemaphoreThread(i+"", semaphore));}}}
0 0
- CountDownLatch,CyclicBarrier,Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- 多线程- countdownlatch、 CyclicBarrier、SemaPhore
- CountDownLatch、CyclicBarrier和Semaphore
- CountDownLatch & CyclicBarrier & Semaphore
- CountDownLatch CyclicBarrier Semaphore
- Semaphore,CountDownLatch,CyclicBarrier
- CyclicBarrier CountDownLatch以及Semaphore
- CountDownLatch、CyclicBarrier & Semaphore
- CountDownLatch、CyclicBarrier和Semaphore
- CyclicBarrier CountDownLatch Semaphore Exchanger
- Semaphore, CountDownLatch,CyclicBarrier 简单理解
- CountDownLatch、CyclicBarrier和Semaphore区别
- CountDownLatch、CyclicBarrier和Semaphore用法
- JAVA并发CountDownLatch、CyclicBarrier、Semaphore
- 固定链接更改后,文章打不开解决方案
- IE和火狐关于文件上传路径然后下载的问题(正常路径IE识别,火狐识别不出正常的路径)
- 多线程下载原理
- LeeCode 94 Binary Tree Inorder Traversal
- Android Studio中如何在Debug模式运行的时候自动签名
- CountDownLatch,CyclicBarrier,Semaphore
- Java中静态变量和实例变量的区别
- SO_RCVLOWAT和SO_SNDLOWAT选项
- ubantu下codeblock如何配色
- 一个最基本的二叉树
- http://blog.csdn.net/jhh_move_on/article/details/36932239
- apache+tomcat二级域名配置方法
- 抽象类、接口、事件、Action、Func
- 打印沙漏