Java并发工具类

来源:互联网 发布:把事情做到极致 知乎 编辑:程序博客网 时间:2024/06/07 02:12

Java并发工具类

1、CountDownLatch

CountDownLatch首先定义任务次数,并调用await()方法等待任务完成。调用countDown()方法表明已经完成一项任务,当任务全部完成后,继续await()方法后的任务。
public class CountDownLatchTest {public static void main(String[] args) throws InterruptedException {final CountDownLatch latch = new CountDownLatch(2);for (int i = 0; i < 2; i++) {new Thread() {public void run() {try {System.out.println(currentThread().getName() + " start");Thread.sleep(1000);latch.countDown();System.out.println(currentThread().getName() + " end");} catch (InterruptedException e) {e.printStackTrace();}}}.start();}System.out.println(Thread.currentThread().getName() + " start");latch.await();System.out.println(Thread.currentThread().getName() + " end");}}

2、CyclicBarrier

CyclicBarrier会等待所有的await()方法调用结束。
public class CyclicBarrierTest {public static void main(String[] args) throws InterruptedException, BrokenBarrierException {final CyclicBarrier barrier = new CyclicBarrier(3);for (int i = 0; i < 3; i++) {new Thread() {public void run() {try {System.out.println(currentThread().getName() + " start");Thread.sleep(1000);barrier.await();System.out.println(currentThread().getName() + " end");} catch (Exception e) {e.printStackTrace();}}}.start();}}}

可以调用CyclicBarrier的另一个构造函数CyclicBarrier(int, Runnable),在await()方法后最先调用Runnable。

public class CyclicBarrierTest {public static void main(String[] args) throws InterruptedException, BrokenBarrierException {final CyclicBarrier barrier = new CyclicBarrier(3, new Thread() {public void run() {System.out.println("In CyclicBarrier");}});for (int i = 0; i < 3; i++) {new Thread() {public void run() {try {System.out.println(currentThread().getName() + " start");Thread.sleep(1000);barrier.await();System.out.println(currentThread().getName() + " end");} catch (Exception e) {e.printStackTrace();}}}.start();}}}

3、Executors

使用Executors可以生成线程池。
newFixedThreadPool(int)newFixedThreadPool(int, ThreadFactory)newSingleThreadExecutor()newSingleThreadExecutor(ThreadFactory)newCachedThreadPool()newCachedThreadPool(ThreadFactory)

4、ThreadPoolExecutor

corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
workQueue: 线程池所使用的缓冲队列

public ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue<Runnable> workQueue) {        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,             Executors.defaultThreadFactory(), defaultHandler);    }

0 0