本文共 2759 字,大约阅读时间需要 9 分钟。
JUC | |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 |
1.CountDownLatch
package com.company.common_assist;public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { //总数是6,必须要执行任务的时候,再使用 java.util.concurrent.CountDownLatch countDownLatch = new java.util.concurrent.CountDownLatch(5); for (int i = 1; i <= 6; i++) { new Thread(()->{ System.out.println(Thread.currentThread().getName() + "go out"); try { countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } },String.valueOf(i)).start(); } countDownLatch.await(); //等待计数器归零,然后向下执行 System.out.println("Close Door"); }}
运行结果:
2.CyclicBarrier
package com.company.common_assist;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;//允许一组线程全部等待彼此到达共用的同步复制public class CyclicBarrierTest { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{ System.out.println("召唤神龙"); }); for (int i = 1; i <= 7; i++) { final int temp = i; new Thread(()->{ System.out.println(Thread.currentThread().getName() + "收集第" + temp + "个龙珠"); try { cyclicBarrier.await(); //等待 } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } },String.valueOf(i)).start(); } }}
运行结果:
3.Semaphore
package com.company.common_assist;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;//一个计数信号量,在概念上,信号量要维持一组许可证//如果有必要,每个acquire()都会阻塞,直到许可证可用,然后才能使用它//作用:多个共享资源互斥的使用!并发限流,控制最大的线程数public class SemaphoreTest { public static void main(String[] args) { //线程数量:停车位!限流! Semaphore semaphore = new Semaphore(3); for (int i = 1; i <= 6; i++) { new Thread(()->{ try { //如果已经满了,会等待资源被释放 semaphore.acquire(); System.out.println(Thread.currentThread().getName() + "抢到车位"); TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName() + "离开车位"); } catch (InterruptedException e) { e.printStackTrace(); }finally { semaphore.release(); //释放,然后唤醒等待的资源 } },String.valueOf(i)).start(); } }}
运行结果:
转载地址:http://jyhjz.baihongyu.com/