1.它們都是在多線程環境下,可以在程序調用時阻塞指定的毫秒數並返回。
2.wait()和sleep()都可以通過interrupt()方法中斷線程的掛起狀態,使線程立即拋出InterruptedException。
如果線程A想要立即結束線程B,它可以在線程B對應的線程實例上調用中斷方法..如果此時線程B正在等待/睡眠/加入,線程B會立即拋出InterruptedException,直接在catch() {}中返回,安全結束線程。
需要註意的是,InterruptedException是由線程本身從內部拋出的,而不是由interrupt()方法拋出的。在線程上調用interrupt()時,如果線程正在執行普通代碼,那麽線程根本不會拋出InterruptedException。但是,壹旦線程進入wait()/sleep()/join(),就會立即拋出InterruptedException。
差異:
1的方法。線程類:sleep()、yield()等。
對象方法:wait()和notify()等。
2.每個對象都有壹個鎖來控制同步訪問。Synchronized關鍵字可以與對象的鎖進行交互,實現線程的同步。
sleep方法不釋放鎖,而wait方法釋放鎖,以便其他線程可以使用同步控制塊或方法。
3.wait、notify和notifyAll只能在同步控制方法或同步控制塊中使用,而sleep可以在任何地方使用。
4.sleep必須捕捉異常,但是wait、notify和notify都不需要捕捉異常。