日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java Semaphore 信号量

發布時間:2024/9/19 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Semaphore 信号量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java Semaphore 信號量

Semaphore 是一種基于計數的信號量。它可以設定一個閾值,基于此,多個線程競爭獲取許可信號,做完自己的申請后歸還,超過閾值后,線程申請許可信號將會被阻塞。Semaphore 可以用來構建一些對象池,資源池之類的,比如數據庫連接池。

Semaphore通過 acquire()與release()方法來獲得和釋放臨界資源。

Semaphore 也提供了公平與非公平鎖的機制,也可在構造函數中進行設定

使用Semaphore實現互斥鎖

我們也可以創建計數為 1 的 Semaphore,將其作為一種類似互斥鎖的機制,這也叫二元信號量,表示兩種互斥狀態。

public class test {private int num = 100;//同一時間下只允許一個線程訪問private Semaphore s = new Semaphore(1);public void decrement(){try {s.acquire();int i =10;while (i>0) {num--;i--;System.out.println(Thread.currentThread().getName() + "==>" + num);System.out.println("當前排隊等待的線程個數:" + s.getQueueLength());}} catch (InterruptedException e) {e.printStackTrace();}finally {s.release();}}public static void main(String[] args) {test t = new test();new Thread(()->{t.decrement();},"A").start();new Thread(()->{t.decrement();},"B").start();new Thread(()->{t.decrement();},"C").start();new Thread(()->{t.decrement();},"D").start();new Thread(()->{t.decrement();},"E").start();} }

Semaphore主要方法

  • public void acquire(): 用來獲取一個許可,若無許可能夠獲得,則會一直等待,直到獲得許可。
  • public void acquire(int permits):獲取 permits 個許可
  • public void release() { } :釋放許可。注意,在釋放許可之前,必須先獲獲得許可。
  • public void release(int permits) { }:釋放 permits 個許可上面 4 個方法都會被阻塞,如果想立即得到執行結果,可以使用下面幾個方法13/04/2018
  • public boolean tryAcquire():嘗試獲取一個許可,若獲取成功,則立即返回 true,若獲取失敗,則立即返回 false
  • public boolean tryAcquire(long timeout, TimeUnit unit):嘗試獲取一個許可,若在指定的時間內獲取成功,則立即返回 true,否則則立即返回 false
  • public boolean tryAcquire(int permits):嘗試獲取 permits 個許可,若獲取成功,則立即返回 true,若獲取失敗,則立即返回 false
  • public boolean tryAcquire(int permits, long timeout, TimeUnit unit): 嘗試獲取 permits個許可,若在指定的時間內獲取成功,則立即返回 true,否則則立即返回 false
  • availablePermits()方法得到可用的許可數目。

總結

以上是生活随笔為你收集整理的Java Semaphore 信号量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。