Java并发编程之CountDownLatch、CyclicBarrier和Semaphore

331 阅读1分钟

CountDownLatch

利用本身类似计数器功能,当一个任务需要等待其他N个任务执行完毕后才能执行,CountDownLatch就能实现。

  • await()--阻塞线程等待,直到count为0
  • await(long time, TimeUnit unit)--与await相似,不过等待时间超过指定时间还没到0将继续执行
  • countdown()--数值减1


示例中初始化如果改为3,执行完毕将不会打印出来,会一直阻塞等待count等于0

CyclicBarrier

回环栅栏,表示它可以实现让一组线程都等待某个状态再全部同时执行,叫回环是因为可重入


SemaPhore

信号量,表示可以控制线程的个数,acquire()申请一个许可,没有则等待;release()释放一个许可