我有一個執行緒串列,我只想計算當前活動的執行緒,但是方法 isAlive() 不起作用。這是或存在其他方法檢查當前活動執行緒的正確程度。
public int activeSize() {
int count = 0;
for (Thread thread : list) {
if (thread.isAlive()) {
count ;
}
}
return count;
}
uj5u.com熱心網友回復:
該函式統計行程中所有的活動執行緒數:
java.lang.Thread.activeCount();
當然,您可以使用getState()而不是isActive()檢查當前執行緒的狀態。
uj5u.com熱心網友回復:
tl;博士
比較執行緒的狀態:
thread.getState().equals( Thread.State.RUNNABLE )
這是從您的Thread物件串列制作流的示例。
threads
.stream()
.filter(
thread -> thread.getState().equals( Thread.State.RUNNABLE )
)
.count() // Or collect them: `.toList()`
或者計算所有活動執行緒:
Thread.activeCount()
細節
我在這沒有經驗,但尋找的Javadoc Thread,我看到了getState。該方法回傳一個Thread.State列舉物件。檔案說:
一個執行緒可以處于以下狀態之一,如從檔案中參考的:
NEW
尚未啟動的執行緒處于此狀態。RUNNABLE
在 Java 虛擬機中執行的執行緒處于這種狀態。BLOCKED
被阻塞等待監視器鎖的執行緒處于這種狀態。WAITING
無限期等待另一個執行緒執行特定操作的執行緒處于此狀態。TIMED_WAITING
等待另一個執行緒執行操作達指定等待時間的執行緒處于此狀態。TERMINATED
已退出的執行緒處于此狀態。
所以回圈你的Thread物件,獲取它們的State,看看它是否是RUNNABLE。
for ( Thread thread : list) {
if ( thread.getState().equals( Thread.State.RUNNABLE ) ) {
…
}
}
但是,如果您只想計算所有活動執行緒的數量,請呼叫Thread.activeCount().
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361152.html
