線程單獨創建,但可歸類到線程組,便於調試監視。只能創建時關聯線程組。大量線程程序中,線程組組織線程極有幫助,類比電腦目錄文件結構。
synchronized 僅防止併發更新,無法實現線程間信號通知。Object 提供三個方法:
wait():釋放鎖並等待通知notify():喚醒單個等待線程notifyAll():喚醒所有等待線程全球氣候預測程序:地球分眾多單元,每循環各單元隔離計算至值穩定,再交換鄰域數據。本質上每循環所有線程必須等待所有線程完成任務才能進入下一循環。此模型稱為屏障同步。
notify() 僅通知一個等待線程,適合每次只允許一線程訪問的資源。但無法預知哪個線程獲通知,取決於 JVM 調度算法。
線程放棄稀缺資源(數據庫連接、網絡端口)時,可調用 yield() 臨時降低優先級,讓其他線程運行。
兩類線程:
Thread.setDaemon(true) 設置守護線程。Java 程序運行到所有用戶線程終止,隨後銷毀所有守護線程。即使 main 結束,若其他用戶線程仍運行,程序繼續。
ExecutorService)+ 監控工具更主流java.util.concurrent 套件:CountDownLatch、CyclicBarrier、Phaser 實現屏障同步;BlockingQueue 實現生產者消費者