Java中的wait()和block()是多線程編程中常用的機制,它們的作用是控制線程的執行,實現同步。但是,它們的使用場景和實現方式不同,需要根據具體需求選擇適合的機制。
public synchronized void wait() throws InterruptedException { while (condition不成立) { wait(); // 等待condition成立 } // condition成立,執行任務 }
wait()是Object類的方法,只能在同步塊或同步方法中使用。線程執行到wait()時,會釋放鎖,讓其他獲得鎖的線程繼續執行。同時,當前線程進入等待狀態,等待其他線程通過notify()/notifyAll()或者interrupt()方法通知其恢復執行。
public synchronized void block() { while (condition不成立) { // 等待condition成立 } // condition成立,執行任務 }
block()是一種自旋鎖的實現方式,在執行時會不斷判斷某一條件是否成立,如果不成立則一直執行。與wait()不同的是,block()不會釋放鎖,因此不需要在同步塊或同步方法中使用。但是,由于它需要不斷地執行判斷,可能會造成線程的浪費。
綜上所述,wait()適用于需要等待特定條件的情形,同時需要釋放鎖,讓其他線程繼續執行;block()適用于需要執行特定業務邏輯的情形,同時需要保持鎖的狀態,防止其他線程同時訪問。
下一篇vue顯示ofd文件