目录
目标
并发工具类:CountDownLatch
Fork/Join的使用
Futrue的使用
CountDownLatch
倒计数器。共享锁。由AQS共享锁实现。
countDown();-》倒计数器减一,并阻塞。
await();当countDown();为0时唤醒所有线程。
使用场景:希望n个线程同时执行某一操作。
基本使用
/*
没隔1s开启一个线程,共开启6个线程
若希望6个线程 同时 执行某一操作
可以用CountDownLatch实现
*/
public static void test01() throws InterruptedException {
CountDownLatch ctl = new CountDownLatch(6);
for (int i=0; i<6; i++){
new Thread(){
@Override
public void run() {
ctl.countDown();
try {
ctl.await();
System.out.println("here I am...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
Thread.sleep(1000L);
}
}
Semaphore
信号量,共享锁,限流。由AQS共享锁实现。
传入的参数:同一时间由几个线程可以获取这个共享锁。
抢信号量就是加锁,释放信号量,就是解锁。
CyclicBarrier
批量操作,可以设置批量大小。条件不满足,会一直阻塞,在满足条件后可以触发事件。
Runnable和Callable
Runnable执行run方法后没有返回值。Callable可以获取线程执行后的返回值。
Callable、FutureTast的使用
1.无法直接传入Thread。
2.通过FutureTast对Callable的封装。
3.将FutureTask传入Thread。
4.通过Future.get();获取线程执行的结果,只有等待线程执行完毕,才能拿到执行结果,没有执行完方法会阻塞线程。
5.FutureTask 只能执行一次,里面会有状态,开始执行或者执行完,其它线程不会再次执行。
fork/join并发处理框架
本质:分而治之
任务拆分,结果汇总。
提供了标准的接口(框架)。
fork();任务拆分。 join(); 获取任务结果。 核心compute()方法。
适用性
来源:CSDN
作者:阿莫西邻
链接:https://blog.csdn.net/xiaofbing/article/details/103748300