Java多线程之Semaphore用法
生活随笔
收集整理的這篇文章主要介紹了
Java多线程之Semaphore用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java多線程之Semaphore用法
本文目錄:
1. Semaphore基本概念
在信號量上我們定義兩種操作:
1. 信號量主要用于兩個目的,一個是用于多個共享資源的互斥使用,另一個用于并發線程數的控制。
2. acquire(獲取) 當一個線程調用acquire操作時,它要么通過成功獲取信號量(信號量減1),要么一直等下去,直到有線程釋放信號量,或超時。
3. release(釋放)實際上會將信號量的值加1,然后喚醒等待的線程。
2. Semaphore使用案例:3個停車位,6輛車去搶,走一輛,搶一個停車位。
實現:
public class SemaphoreDemo {public static void main(String[] args) {Semaphore semaphore = new Semaphore(3);//模擬3個停車位for (int i = 1; i <=6 ; i++) {new Thread(()->{try {semaphore.acquire();System.out.println(Thread.currentThread().getName()+"\t 號搶到車位");TimeUnit.SECONDS.sleep(new Random().nextInt(5));System.out.println(Thread.currentThread().getName()+"\t 號離開");} catch (InterruptedException e) {e.printStackTrace();}finally {semaphore.release();}},String.valueOf(i)).start();}} }編譯結果:
總結
以上是生活随笔為你收集整理的Java多线程之Semaphore用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java多线程之CountDownLat
- 下一篇: Java多线程之集合类(线程安全和不安全