java中Semapore的使用

2021-08-21 19:14:50 字數 1109 閱讀 1198

semaphore:訊號量是一種計數器,用來保護乙個或者多個共享資源的訪問。

如果執行緒要訪問乙個共享資源,它必須先獲得訊號量。如果訊號量的內部計數器大於0,訊號量將減1,然後允許訪問這個共享資源。計數器大於0意味著有可以使用的資源,因此執行緒將被允許使用其中的乙個資源。

否則,如果訊號量的計數器等於0,訊號量將會把執行緒置入休眠直至計數器大於0.計數器等於0的時候意味著所有的共享資源已經被其他執行緒使用了,所以需要訪問這個共享資源的執行緒必須等待。

當執行緒使用完某個共享資源時,訊號量必須被釋放,以便其他執行緒能給訪問共享資源。釋放操作將使訊號量的內部計數器增加1。

列子:

public class test1  catch (interruptedexception e) finally

};}.start();}}

}

public final void acquiresharedinterruptibly(int arg)

throws interruptedexception

final int nonfairtryacquireshared(int acquires) 

}

private void doacquiresharedinterruptibly(int arg)

throws interruptedexception

}//parkandcheckinterrupt會阻塞執行緒

if (shouldparkafte***iledacquire(p, node) &&

parkandcheckinterrupt())

throw new interruptedexception();

}} finally

}

protected final boolean tryreleaseshared(int releases) 

}

其他方法:  cem.tryacquire() 會立即返回結果 不會對執行緒進行阻塞。     

cem.acquireuninterruptibly(); 被打斷了任然進行等待。

Java中的繼承及this,super的使用

1 區域性 塊 方法 現 作用 用於限制變數的生命週期,及早釋放,提高記憶體利用率 public class codeblock 結果 10 2 構造 塊 類中的成員位置,每次呼叫構造方法執行前,都會先執行構造 塊 作用 可以把多個構造方法中的共同 放到一起,對物件進行初始化 class code ...

Java中wait 與notify 方法的使用

wait notify 方法介紹 1 wait 方法 讓當前執行緒 持有鎖的執行緒 處於等待 阻塞 的狀態,並且釋放它持有的鎖。該執行緒將處於阻塞狀態,直到其它執行緒呼叫notify 或者notifyall 方法喚醒,執行緒進入就緒狀態。2 wait long 讓當前執行緒 持有鎖的執行緒 處於等待...

Java中迴圈語句for與while的使用

for 語句的基本結構如下所示 for 初始化表示式 判斷表示式 遞增 遞減 表示式 初始化表示式 初始化表示式的意義,在於定義迴圈之前變數的值是多少,如果沒有這一項,就不知道該從哪個值開始迴圈。判斷表示式 判斷表示式的作用在於規定迴圈的終點。如果沒有判斷表示式,那麼此迴圈就成了死迴圈。遞增 遞減 ...