国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java并發(fā)編程:Semaphore

這篇具有很好參考價值的文章主要介紹了Java并發(fā)編程:Semaphore。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Semaphore

信號量可以控制線程的并發(fā)數(shù)量

通常用于那些資源有明確訪問數(shù)量限制的場景,常用于限流 。

使用 Semaphore先調(diào)用acquire()獲取,然后通過try ... finally保證在finally中釋放。

Semaphore常用方法說明

  • acquire()
    獲取一個令牌,在獲取到令牌、或者被其他線程調(diào)用中斷之前線程一直處于阻塞狀態(tài)。

  • acquire(int permits)
    獲取一個令牌,在獲取到令牌、或者被其他線程調(diào)用中斷、或超時之前線程一直處于阻塞狀態(tài)。

  • acquireUninterruptibly()
    獲取一個令牌,在獲取到令牌之前線程一直處于阻塞狀態(tài)(忽略中斷)。

  • tryAcquire()
    嘗試獲得令牌,返回獲取令牌成功或失敗,不阻塞線程。

  • tryAcquire(long timeout, TimeUnit unit)
    嘗試獲得令牌,在超時時間內(nèi)循環(huán)嘗試獲取,直到嘗試獲取成功或超時返回,不阻塞線程。
    ?

  • release()
    釋放一個令牌,喚醒一個獲取令牌不成功的阻塞線程。

面試??碱}目交替打印ABC

    @Test
    public void testSemaphore() {
        int i1 = 100;
        Semaphore semaphore1 = new Semaphore(1, true);
        Semaphore semaphore2 = new Semaphore(0);
        Semaphore semaphore3 = new Semaphore(0);
        new Thread(() -> {
            try {
                for (int i = 0; i < i1; i++) {
                    semaphore1.acquire();
                    System.out.print("A");
                    semaphore2.release();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(() -> {
            try {
                for (int i = 0; i < i1; i++) {
                    semaphore2.acquire();
                    System.out.print("B");
                    semaphore3.release(1);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
        new Thread(() -> {
            try {

                for (int i = 0; i < i1; i++) {
                    semaphore3.acquire();
                    System.out.println("C");
                    semaphore1.release(1);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }

Semaphore 使用及原理
文章來源地址http://www.zghlxwxcb.cn/news/detail-523942.html

到了這里,關(guān)于Java并發(fā)編程:Semaphore的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java并發(fā)編程實戰(zhàn)

    2023年06月19日
    瀏覽(20)
  • Java-并發(fā)編程-進階篇

    Java-并發(fā)編程-進階篇

    在上一篇幅中對并發(fā)編程進行了簡單介紹:并發(fā)與并行,進程與線程,以及并發(fā)編程的簡單代碼 但是在企業(yè)中往往并不能解決實際問題,例如: 1.synchronized在企業(yè)開發(fā)中會大大降低系統(tǒng)的性能,有什么解決方式,或者其他的替代方案 2.當(dāng)線程被創(chuàng)建并啟動以后,它既不

    2024年02月06日
    瀏覽(29)
  • Java并發(fā)編程面試題

    Java并發(fā)編程面試題

    目錄 一、線程、進程、程序 二、線程狀態(tài) ?三、線程的七大參數(shù) 四、線程有什么優(yōu)缺點? 五、start 和 run 方法有什么區(qū)別? 六、wait 和 sleep的區(qū)別? 七、lock與synchronized的區(qū)別 八、Volatile是線程安全的嗎?底層原理是什么? 九、synchronized作用和底層原理? 十一、Thre

    2024年02月12日
    瀏覽(25)
  • Java并發(fā)編程-volatile

    volatile 是 java 虛擬機提供的一種輕量級的同步機制,它有三個重要的特性: 保證可見性 不保證原子性 禁止指令重排 要理解這三個特性,就需要對 JMM (JAVA內(nèi)存模型)有一定的了解才行。 主要解決的問題: JVM中,每個線程都會存在本地內(nèi)存,本地內(nèi)存是公共內(nèi)存的副本,各

    2024年02月06日
    瀏覽(21)
  • Java使用redis-Redis是并發(fā)安全的嗎?

    Java使用redis-Redis是并發(fā)安全的嗎?

    大家都清楚,Redis 是一個開源的高性能鍵值對存儲系統(tǒng),被開發(fā)者廣泛應(yīng)用于緩存、消息隊列、排行榜、計數(shù)器等場景。 由于其高效的讀寫性能和豐富的數(shù)據(jù)類型,Redis 受到了越來越多開發(fā)者的青睞。然而,在并發(fā)操作下,Redis 是否能夠保證數(shù)據(jù)的一致性和安全性呢?接下來

    2024年02月11日
    瀏覽(17)
  • 【面試】java并發(fā)編程面試題

    【面試】java并發(fā)編程面試題

    java并發(fā)面試題 https://javaguide.cn/home.html java基礎(chǔ)面試題 https://blog.csdn.net/jackfrued/article/details/44921941 java集合面試題 https://javaguide.cn/java/collection/java-collection-questions-01.html javaIO面試題 https://javaguide.cn/java/io/io-basis.html JVM面試題 https://javaguide.cn/java/jvm/jvm-garbage-collection.html 計算機網(wǎng)絡(luò)

    2024年01月21日
    瀏覽(38)
  • java并發(fā)編程:ArrayBlockingQueue詳解

    java并發(fā)編程:ArrayBlockingQueue詳解

    ArrayBlockingQueue 顧名思義:基于數(shù)組的阻塞隊列。數(shù)組是要指定長度的,所以使用 ArrayBlockingQueue 時必須指定長度,也就是它是一個有界隊列。它實現(xiàn)了 BlockingQueue 接口,有著隊列、集合以及阻塞隊列的所有方法。 ArrayBlockingQueue 是線程安全的,內(nèi)部使用 ReentrantLock 來保證。A

    2024年02月08日
    瀏覽(30)
  • java并發(fā)編程 LinkedBlockingDeque詳解

    java 并發(fā)編程系列文章目錄 首先queue是一種數(shù)據(jù)結(jié)構(gòu),一個集合中,先進后出,有兩種實現(xiàn)的方式,數(shù)組和鏈表。從尾部追加,從頭部獲取。Deque是兩端都可以添加,且兩端都可以獲取,所以它的方法會有一系列的Last,F(xiàn)rist語義,添加或獲取等操作會指明哪個方向的,這也是

    2024年02月10日
    瀏覽(20)
  • 01.java并發(fā)編程面試寶典

    談?wù)勈裁词蔷€程池 線程池和數(shù)據(jù)庫連接池非常類似,可以統(tǒng)一管理和維護線程,減少沒有必要的開銷。 因為頻繁的開啟線程或者停止線程,線程需要從新被 cpu 從就緒到運行狀態(tài)調(diào)度,需要發(fā)生上下文切換 實際開發(fā)項目中 禁止自己 new 線程。必須使用線程池來維護和創(chuàng)建線

    2024年02月03日
    瀏覽(41)
  • java并發(fā)編程:LinkedBlockingQueue詳解

    java并發(fā)編程:LinkedBlockingQueue詳解

    在集合框架里,想必大家都用過ArrayList和LinkedList,也經(jīng)常在面試中問到他們之間的區(qū)別。ArrayList和ArrayBlockingQueue一樣,內(nèi)部基于數(shù)組來存放元素,而LinkedBlockingQueue則和LinkedList一樣,內(nèi)部基于鏈表來存放元素。 LinkedBlockingQueue實現(xiàn)了BlockingQueue接口,這里放一張類的繼承關(guān)系圖

    2024年02月08日
    瀏覽(64)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包