-
物件的所有狀態是什麼
Thread
?- 新的
- 可運行
- 封鎖
- 等待
- TIMED_WAITING
- 終止
-
線程進入區塊時可以進入什麼狀態
synchronized
?- 可運行
- 封鎖
在RUNNABLE中,如果標記的程式碼區塊
synchronized
沒有被另一個執行緒佔用。否則,我們的線程將收到 BLOCKED 狀態並等待互斥物件被釋放。 - 呼叫該方法時執行緒會進入什麼狀態
wait()
?呼叫此方法會將執行緒置於 WAITING 狀態。
該方法只能在已被當前執行緒「鎖定」的互斥物件上的wait()
區塊內調用,否則該方法將拋出IllegalMonitorStateException異常。synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
當一個方法被呼叫時wait()
,當前執行緒釋放該物件的鎖定monitor
並進入WAITING狀態,等待該方法被monitor.notify()
另一個monitor.notifyAll()
執行緒呼叫。一旦發生這種情況,線程就會醒來,如果監視器不忙,它將抓住它並繼續工作。
如果監視器被另一個執行緒佔用,則目前執行緒將進入 BLOCKED 狀態。 -
呼叫該方法時執行緒會進入什麼狀態
呼叫此方法會將執行緒置於 TIMED_WAITING 狀態。wait(500)
?
與方法類比wait()
,它只能在已被當前執行緒「鎖定(locked)」的互斥物件上的wait(timeout)
一個區塊內呼叫。synchronized
Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
當呼叫該方法時
wait()
,當前執行緒釋放該物件的鎖monitor
並進入睡眠狀態 500 毫秒。該物件monitor
可能被另一個執行緒捕獲。
500 毫秒後,執行緒將被喚醒,如果monitor
它不忙,它將抓住它並繼續工作。
如果監視器被另一個執行緒佔用,則目前執行緒將進入 BLOCKED 狀態。呼叫該方法時執行緒會進入什麼狀態
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
之後monitor.wait()
,執行緒將進入 WAITING 狀態。notify()
物件上的另一個執行緒呼叫的方法monitor
會將執行緒從 WAITING 狀態移至 RUNNABLE 狀態,除非監視器物件被另一個執行緒捕獲,否則移至 BLOCKED 狀態。 -
呼叫該方法時執行緒會進入什麼狀態
notifyAll()
?notifyAll()
“將留下”所有線程。所有「睡眠」(WAITING)執行緒之一將進入 RUNNABLE 狀態,接管正在使用的物件的監視器並繼續其工作。其餘的將處於 BLOCKED 狀態。一旦第一個「喚醒」執行緒釋放了其他人都在等待的監視器,下一個執行緒就會重複它的命運(任意執行緒將從 BLOCKED 狀態進入 RUNNABLE 狀態)。這將繼續,直到所有「喚醒」執行緒離開 BLOCKED 狀態。 -
三個執行緒中的synchronized區塊稱為
其中兩個將進入 BLOCKED 狀態,一個進入 RUNNABLE 狀態wait()
互斥物件。如果第四個線程調用,這些線程將進入什麼狀態notifyAll()
? -
儘管 和join(500)
它與有何不同wait(500)
?join(500)
會將wait(500)
當前執行緒轉移到 TIMED_WAITING 狀態,但它們之間存在顯著差異:join(500)
在執行緒上調用,wait(500)
在該區塊同步的物件上的同步區塊內調用。
呼叫時,join(500)
當前執行緒將等待 500 毫秒,等待join()
呼叫其方法的執行緒完成。
呼叫時,wait(500)
當前執行緒將釋放同步物件的鎖定並進入睡眠狀態 500 毫秒。
500 毫秒後,這兩種情況下線程都將繼續工作。 -
wait(500)
它與有何不同sleep(500)
?sleep(500)
在執行緒上調用,wait(500)
在同步區塊內同步該區塊的物件上調用。
呼叫時,sleep(500)
當前執行緒將等待 500 毫秒,然後繼續其工作。
呼叫時,wait(500)
當前執行緒將釋放同步物件的鎖定並進入睡眠狀態 500 毫秒。 -
呼叫該方法時執行緒會進入什麼狀態
當一個方法被呼叫時yield()
?yield()
,當前執行緒“跳過它的輪次”,java立即切換到執行下一個執行緒。線程從一個狀態轉到running
另一個狀態ready
。運轉和就緒狀態是 RUNNABLE 狀態的子狀態。
GO TO FULL VERSION