java.util.concurrent - Java并发工具包

时间:2022-11-08 17:36:16

Java 5添加了一个新的包到Java平台,java.util.concurrnet包。这个包包含有一系列能够让Java的并发编程变得更加简单轻松的类。

1.BlockingQueue 阻塞队列

一个线程将会持续生产新对象并将其插入到队列之中,直到队列达到它所能容纳的临界点。也就是说,它是有限的,如果该阻塞队列到达了其临界点,负责生产的线程将会在往里面插入新对象时发生阻塞。

负责消费的线程将会一直从该阻塞队列中拿出对象。如果消费线程尝试去从一个空的队列中提取对象的时候,这个消费线程将会处于阻塞中,直到一个生产线程把一个对象丢进队列。

BlockingQueue是个接口,你需要使用它的实现之一使用BlockingQueue.

(1)ArrayBlockingQueue,是一个有界的阻塞队列。

(2)DelayQueue,对元素进行持有直到一个特定的延迟到期,注入其中的元素必须实现 java.util.concurrnet.Delayed接口。

(3)LinkedBlockingQueue,可以选择一个上限。

(4)PriorityBlockingQueue,*队列,所有插入到PriorityBlockingQueue的元素必须实现java.lang.Comparable接口。

(5)SynchronousQueue,它的内部同时只能容纳单个元素。


2.BlockingDeque  阻塞双端队列

双端队列是一个你可以从任意一端插入或提取元素的队列。这也是一个接口,它的实现类有LinkedBlockingDeque。


3.ConcurrentMap  并发Map

这是一个接口,其实现类为ConcurrentHashMap


4.CountDownLatch  闭锁

它允许一个或多个线程等待一系列指定操作的完成。

CountDownLatch以一个给定的数量初始化。countDown()每被调用一次,这一数量就减一。通过调用await()方法之一,线程可以阻塞等待这一数量到达零。


5.CyclicBarrier

这是一个同步机制,它能够处理一些算法的线程的同步问题。换句话说它就是一个所有线程必须等待的一栅栏,直到所有的线程都到达这里,然后所有线程才可以继续做其他事情。


6.Exchanger交换机

表示一种两个线程可以进行互相交换对象的会和点。


7.Semaphore信息量

(1)acquire()

(2)release()

信号量主要有两种用途:

(1)保护一个重要的(代码)部分防止一美人鱼超过N个线程进入。

(2)在两个线程之间发送信号


8.ExecutorService 执行器服务

类似于一个线程池。这是一个接口,它的实现类有ThreadPoolExecutor和ScheduledThreadPoolExecutor。


9.ForkJoinPool

在Java7中被引入,这是一个特殊的线程池,它的设计是为更好的配合分叉-合并任务的工作。


10.Lock 锁

它是一个类似于synchronized块的线程同步机制。但是Lock比synchronized块更加灵活、精细。

(1)synchroinzed代码块不能够保证进入访问等待的线程的先后顺序。

(2)不能够传递任何参数给一个synchronized代码块的入口

(3)synchronized块必须被完整地包含在单个方法里,而一个Lock对象的可以把它的lock和unlock方法的调用放在不同的方法里。

这是一个接口,它的实现类是ReetrantLock。



11.ReadWriteLock读定锁

它能够允许多个线程在同一时间对某特定资源进行读取,但同一时间内嗵有一个线程对其进行定入。这是一个接口,它的实现类是ReentrantReadWriteLock。




12.AtomicBoolean

AtomicInteger

AtomicLong

AtomicReference