J.U.C并发工具类

你。 提交于 2019-12-30 02:50:26

目录

目标

并发工具类: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()方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
适用性
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!