欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java并發(fā)編程之工具類Semaphore的使用

 更新時間:2021年06月02日 17:16:51   作者:小志的博客  
目前幾乎所有的語言都支持信號量機制,Java也不例外.Java中提供了Semaphore并發(fā)工具類來支持信號量機制,下面我們就來了解Java實現(xiàn)的信號量機制,文中有非常詳細的介紹,需要的朋友可以參考下

一、Semaphore的理解

  • Semaphore屬于java.util.concurrent包;
  • Semaphore翻譯成字面意思為信號量,Semaphore可以控制同時訪問的線程個數(shù),通過acquire()獲取一個許可,如果沒有就等待,而release()釋放一個許可。

二、Semaphore類中常用方法

在這里插入圖片描述

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

三、Semaphore類的使用示例

使用場景:
停車場容納總停車量5,
停車場剩余車位不足時,車輛只能在外面等待。
每有一輛車駛出停車場后,顯示牌的剩余車位數(shù)響應(yīng)的加1。
當(dāng)一輛車進入停車場后,顯示牌的剩余車位數(shù)響應(yīng)的減1.

1.代碼

package com.xz.thread.Semaphore;

import java.util.Random;
import java.util.concurrent.Semaphore;

/**
 * @description:  停車場容納總停車量5,
 *                停車場剩余車位不足時,車輛只能在外面等待。
 *                每有一輛車駛出停車場后,顯示牌的剩余車位數(shù)響應(yīng)的加1。
 *                當(dāng)一輛車進入停車場后,顯示牌的剩余車位數(shù)響應(yīng)的減1.
 * @author: xz
 * @create: 2021-05-31 21:03
 */
public class Demo {

    //停車場停車方法
    public void stopCar(Semaphore  semaphore){
        System.out.println(Thread.currentThread().getName()+" 來到停車場。");

        if(semaphore.availablePermits()==0){
            System.out.println("車位不足,請耐心等待。。。。");
        }

        //獲取令牌嘗試進入停車場
        try {
            semaphore.acquire();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+" 成功進入停車場。");

        //模擬車輛在停車場停留的時間
        try {
            Thread.sleep(new Random().nextInt(5000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(Thread.currentThread().getName()+" 駛出停車場。");

        //釋放令牌,騰出停車場車位
        semaphore.release();

    }

    public static void main(String[] args) {
        Demo d=new Demo();
        //停車場同時容納的車輛5
        Semaphore semaphore = new Semaphore(5);

        //模擬10輛車進入停車場
        for(int i=1;i<=10;i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    d.stopCar(semaphore);
                }
            },i+"號車").start();
        }
    }
}

2.運行main函數(shù),輸出結(jié)果如下:

1號車 來到停車場。
3號車 來到停車場。
3號車 成功進入停車場。
7號車 來到停車場。
1號車 成功進入停車場。
7號車 成功進入停車場。
2號車 來到停車場。
2號車 成功進入停車場。
8號車 來到停車場。
8號車 成功進入停車場。
4號車 來到停車場。
車位不足,請耐心等待。。。。
6號車 來到停車場。
車位不足,請耐心等待。。。。
5號車 來到停車場。
車位不足,請耐心等待。。。。
9號車 來到停車場。
車位不足,請耐心等待。。。。
10號車 來到停車場。
車位不足,請耐心等待。。。。
8號車 駛出停車場。
4號車 成功進入停車場。
4號車 駛出停車場。
6號車 成功進入停車場。
3號車 駛出停車場。
5號車 成功進入停車場。
1號車 駛出停車場。
9號車 成功進入停車場。
7號車 駛出停車場。
10號車 成功進入停車場。
2號車 駛出停車場。
6號車 駛出停車場。
10號車 駛出停車場。
5號車 駛出停車場。
9號車 駛出停車場。
  Process finished with exit code 0。

到此這篇關(guān)于Java多線程之并發(fā)工具類Semaphore的使用的文章就介紹到這了,更多相關(guān)Java工具類Semaphore內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot 中密碼加密的兩種方法

    Spring Boot 中密碼加密的兩種方法

    這篇文章主要介紹了Spring Boot 中密碼加密的兩種方法,幫助大家更好的理解和使用Spring Boot框架,感興趣的朋友可以了解下
    2020-09-09
  • Java中ArrayList類的源碼解析

    Java中ArrayList類的源碼解析

    本文主要介紹了Java中ArrayList類的源碼解析,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Spring Cloud Gateway實現(xiàn)灰度發(fā)布方案

    Spring Cloud Gateway實現(xiàn)灰度發(fā)布方案

    灰度發(fā)布是在微服務(wù)中的表現(xiàn)為同一服務(wù)同時上線不同版本,讓一部分用戶使用新版本來驗證新特性,如果驗證沒有問題,則將所有用戶都遷移到新版本上,本文就來介紹一下如何實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Web Service 運行原理詳細介紹

    Web Service 運行原理詳細介紹

    這篇文章主要介紹了 Web Service 運行原理詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • idea項目打開后出現(xiàn)橙色的時鐘圖標的解決

    idea項目打開后出現(xiàn)橙色的時鐘圖標的解決

    本文主要介紹了idea項目打開后出現(xiàn)橙色的時鐘圖標的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • java泛型常用通配符實例解析

    java泛型常用通配符實例解析

    這篇文章主要介紹了java泛型常用通配符實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • SpringBoot記錄Http請求日志的方法

    SpringBoot記錄Http請求日志的方法

    這篇文章主要介紹了SpringBoot記錄Http請求日志的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • IDEA的常見的設(shè)置和優(yōu)化功能圖文詳解

    IDEA的常見的設(shè)置和優(yōu)化功能圖文詳解

    這篇文章主要介紹了IDEA的常見的設(shè)置和優(yōu)化功能,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • java隨機驗證碼生成實現(xiàn)實例代碼

    java隨機驗證碼生成實現(xiàn)實例代碼

    這篇文章主要介紹了java隨機驗證碼生成實現(xiàn)實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • java根據(jù)url抓取并生成縮略圖的示例

    java根據(jù)url抓取并生成縮略圖的示例

    這篇文章主要介紹了java根據(jù)url抓取并生成縮略圖的示例,需要的朋友可以參考下
    2014-05-05

最新評論