Semaphore(信號量)是用來控制同時訪問特定資源的線程數量。java
import java.util.concurrent.*; /** * Created by Administrator on 2017/5/22 0022. */ public class Test { private static final int THREAD_COUNT = 10;//併發爲10 private static ExecutorService threadPool = Executors .newFixedThreadPool(THREAD_COUNT); private static Semaphore s = new Semaphore(3); //設置最大訪問量爲3個 public static void main(String[] args) { for (int i = 0; i < THREAD_COUNT; i++) { threadPool.execute(new Runnable() { @Override public void run() { try { s.acquire();
Thread.sleep(3000); System.out.println("save data"); s.release(); } catch (InterruptedException e) { } } }); } threadPool.shutdown(); } }
從上面代碼看出來給它10個線程,可是每次只容許3個併發的執行。併發
經過上面例子,來分析一下源碼ide
Semaphore(int permits) 接受一個整型的數字,表示可用的許可證數量,也是默認的非公平性模式函數
Semaphore(int permits,boolean fair)建立公平性仍是非公平性模式ui
若是沒有可用的許可,則在發生如下兩種狀況之一前,禁止將當前線程用於線程安排目的並使其處於休眠狀態:spa
release()
中斷
。InterruptedException
,而且清除當前線程的已中斷狀態。 線程
InterruptedException
- 若是當前線程被中斷
Semaphore還提供一些其餘方法:3d