其他重要方法
Executors 类
Executors 类提供了其他一些创建 ThreadPoolExecutor 对象的方法。
这些方法有如下几种。
- newCachedThreadPool() :该方法创建了一个 ThreadPoolExecutor 对象,会重新使用 空闲的工作线程,但是如果必要,它也会创建一个新的工作线程。在此并没有最大工作线 程数。
- newSingleThreadExecutor() :该方法创建了一个仅使用单个工作线程的 ThreadPool- Executor 对象。发送给执行器的任务会存储在一个队列中,直到该工作线程可以执行它们 为止。
CountDownLatch 类
CountDownLatch 类额外提供了如下几种方法。
- await(long timeout, TimeUnit unit) :该方法将一直等待,直到内部计数器数值为 0 并超过参数中指定的时间为止。如果超时,则该方法返回 false 值。
- getCount() :该方法返回内部计数器的实际值。
并发数据结构
Java 中有两种类型的并发数据结构。
- 阻塞型数据结构:当你调用某个方法但是类库无法执行该项操作时(例如,你试图获取某个 元素而数据结构是空的),这种结构将阻塞线程直到这些操作可以执行。
- 非阻塞型数据结构:当你调用某个方法但是类库无法执行该项操作时(因为结构为空或者为 满),该方法会返回一个特定值或抛出一个异常。 既有实现上述两种行为的数据结构,也有仅实现其中一种行为的数据结构。
通常,阻塞型数据结构也会实现具有非阻塞型行为的方法,而非阻塞型数据结构并不会实现阻塞型方法。
阻塞型操作
实现阻塞型操作的方法如下。
-
put()
、putFirst()
、putLast()
:
这些方法将一个元素插入数据结构。如果该数据结构已满,则会阻塞该线程,直到出现空间为止。 -
take()
、takeFirst()
、takeLast()
:
这些方法返回并且删除数据结构中的一个元素。如果该数据结构为空,则会阻塞该线程直到其中有元素为止。
非阻塞型操作
实现非阻塞型操作的方法如下。
-
add()
、addFirst()
、addLast()
:
这些方法将一个元素插入数据结构。
如果该数据结构已满,则会抛出一个IllegalStateException
异常。 remove()
、removeFirst()
、removeLast()
:
这些方法将返回并且删除数据结构中的一个元素。
如果该结构为空,则这些方法将抛出一个IllegalStateException
异常。element()
、getFirst()
、getLast()
:
这些方法将返回但是不删除数据结构中的一个元素。
如果该数据结构为空,则会抛出一个IllegalStateException
异常。offer()
、offerFirst()
、offerLast()
:
这些方法可以将一个元素插入数据结构。
如果该结构已满,则返回一个 Boolean 值 false 。poll()
、pollFirst()
、pollLast()
:
这些方法将返回并且删除数据结构中的一个元素。
如果该结构为空,则返回 null 值。peek()
、peekFirst()
、peekLast()
:
这些方法返回但是并不删除数据结构中的一个元素。
如果该数据结构为空,则返回 null 值。