1. 程式人生 > >Semaphore信號量

Semaphore信號量

@override map exce str ret println 信號量 static for

限制並發資源的並發訪問數量。 samephore.acquire(); 獲取許可 samephore.release(); 釋放一個許可。

public class SemaphoreTest implements Runnable {
    Semaphore samephore;
    int id;

    public SemaphoreTest(Semaphore samephore, int id) {
        this.samephore = samephore;
        this.id = id;
    }

    @Override
    
public void run() { // TODO Auto-generated method stub try { samephore.acquire(); Thread.sleep(1000); System.out.println("客戶編號" + id + "正在辦理任務"); samephore.release(); } catch (InterruptedException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } public static void main(String[] args) { Semaphore samephore = new Semaphore(10,true);// 限制並發訪問次數為10 true為采用公平模式。先進的先遍歷 for (int i = 0; i < 20; i++) { new Thread(new SemaphoreTest(samephore, i)).start();; } } }

模擬銀行10個辦理任務的窗口。 samephore.acquire() 如果有10個任務獲取許可並沒有釋放 其他人等待 某一個獲取許可正在執行的任務 釋放許可才能進入

Semaphore信號量