回覆列表
  • 1 # 使用者3615998126879

    下面這是一段java程式碼,public class Z{ public static void main(String[] args) { new Z(); } private Z() { Z a1=this; Z a2=this; synchronized(a1) { try { a2.wait(); System.out.println("done waiting"); } catch (InterruptedException e) { System.out.println("InterruptedException"); } catch (Exception e) { System.out.println("Exception"); } finally { System.out.println("finally"); } } System.out.println("all done"); }}編譯後執行java Z沒有任何輸出,程式也不會結束。ps看了一下狀態,發現狀態是sl+,在Linux中,狀態如下: D 不可中斷 Uninterruptible sleep (usually IO) R 正在執行,或在佇列中的程序 S 處於休眠狀態 T 停止或被追蹤 Z 殭屍程序 W 進入記憶體交換(從核心2.6開始無效) X 死掉的程序 < 高優先順序 N 低優先順序 L 有些頁被鎖進記憶體 s 包含子程序 + 位於後臺的程序組 l 多執行緒,克隆執行緒根據以上資訊,得知其處於休眠狀態,多執行緒,且是後臺程序。我們知道Java中,wait():讓執行緒處於等待狀態。這時執行緒會釋放鎖。並存入到了執行緒池中。notify():通常喚醒執行緒池中的第一個。notifyAll():將執行緒池中的所有等待執行緒都喚醒。所以在wait的時候,此執行緒休眠等待其他執行緒notify,所以就處於休眠狀態了。

  • 中秋節和大豐收的關聯?
  • 被養的貓抓了手上有一條淡淡的紅痕,家人說塗點紅藥水就好了,不要再做什麼嗎?