第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

當(dāng)線程改變狀態(tài)時(shí),有沒有辦法在進(jìn)程中獲取通知?

當(dāng)線程改變狀態(tài)時(shí),有沒有辦法在進(jìn)程中獲取通知?

函數(shù)式編程 2021-12-30 17:16:49
當(dāng)線程改變狀態(tài)時(shí),有沒有辦法在進(jìn)程中獲取通知?我正在編寫一個(gè)監(jiān)視線程狀態(tài)變化的程序。我可以經(jīng)常輪詢每個(gè)線程,但我更喜歡更具反應(yīng)性的內(nèi)容。
查看完整描述

2 回答

?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

是的,使用conditional variable,這是一個(gè)例子:


import java.util.concurrent.locks.*;

public class CubbyHole2 {

    private int contents;

    private boolean available = false;  // this is your state

    private Lock aLock = new ReentrantLock(); // state must be protected by lock

    private Condition condVar = aLock.newCondition(); // instead of polling, block on a condition


    public int get(int who) {

        aLock.lock();  

        try {

            // first check state

            while (available == false) {

                try {

                    // if state not match, go to sleep

                    condVar.await(); 

                } catch (InterruptedException e) { }

            }

            // when status match, do someting


            // change status

            available = false;

            System.out.println("Consumer " + who + " got: " +

                                contents);

            // wake up all sleeper than wait on this condition

            condVar.signalAll();  

        } finally {

            aLock.unlock();

            return contents;

        }

    }


    public void put(int who, int value) {

                    aLock.lock();

    try {

        while (available == true) {

            try {

                condVar.await();

            } catch (InterruptedException e) { }

        }

        contents = value;

        available = true;

        System.out.println("Producer " + who + " put: " +

                            contents);

        condVar.signalAll();

        } finally {

            aLock.unlock();

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-12-30
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

您線程運(yùn)行的代碼需要注入代碼以進(jìn)行狀態(tài)更改的回調(diào)。您可以按照@宏杰李的建議通過更改代碼或注入代碼來完成此操作,Instrumentation但是輪詢線程可能是最簡(jiǎn)單的。

注意:線程的狀態(tài)僅從 JVM 的角度告訴您它是所需的狀態(tài)。它沒有顯示給你

  • 是否被阻塞 IO 操作阻塞?

  • 是否進(jìn)行了上下文切換

  • 是否被操作系統(tǒng)或 BIOS 中斷

  • 是否因 GC 或代碼替換而停止

  • 它是否在等待對(duì)靜態(tài)初始化程序塊的鎖定。例如,如果它阻止等待類初始化,則表示它正在運(yùn)行。

順便說一句,即使是操作系統(tǒng)也會(huì)輪詢 CPU 以查看它們?cè)谧鍪裁?,通常每?100 次。


查看完整回答
反對(duì) 回復(fù) 2021-12-30
  • 2 回答
  • 0 關(guān)注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)