Java多線程打輔助的三個小夥子

前言

以前學多線程的時候沒有學習線程的同步工具類(輔助類)。ps:當時以爲暫時用不上,認爲是挺高深的知識點就沒去管了..面試

在前幾天,朋友發了一篇比較好的Semaphore文章過來,而後在瀏覽博客的時候又發現面試還會考,那仍是挺重要的知識點。因而花了點時間去了解一下。多線程

Java爲咱們提供了三個同步工具類工具

  • CountDownLatch(閉鎖)
  • CyclicBarrier(柵欄)
  • Semaphore(信號量)

這幾個工具類其實說白了就是爲了可以更好控制線程之間的通信問題~學習

1、CountDownLatch

1.1CountDownLatch簡介

  • A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.

簡單來講:CountDownLatch是一個同步的輔助類,容許一個或多個線程一直等待直到其它線程完成它們的操做。spa

它經常使用的API其實就兩個:await()countDown()線程

使用說明:code

  • count初始化CountDownLatch,而後須要等待的線程調用await方法。await方法會一直受阻塞直到count=0。而其它線程完成本身的操做後,調用countDown()使計數器count減1。當count減到0時,全部在等待的線程均會被釋放
  • 說白了就是經過count變量來控制等待,若是count值爲0了(其餘線程的任務都完成了),那就能夠繼續執行。

1.2CountDownLatch例子

例子:3y如今去作實習生了,其餘的員工還沒下班,3y很差意思先走,等其餘的員工都走光了,3y再走。orm

相關文章
相關標籤/搜索