Java中的線程提供了sleep()和wait()方法來控制線程的執行。這兩個方法有以下區別:
sleep()方法屬于Thread類,而wait()方法屬于Object類。因此,sleep()方法可以在任何對象上調用,而wait()方法只能在同步塊或同步方法中調用。
sleep()方法使當前線程進入阻塞狀態,暫停執行一段時間,然后重新進入就緒狀態。在此期間,線程仍然持有鎖對象,其他線程無法訪問該對象。而wait()方法使當前線程進入等待狀態,釋放鎖對象,等待其他線程通過notify()或notifyAll()方法喚醒。
sleep()方法的調用不需要被喚醒,而wait()方法必須等待其他線程調用notify()或notifyAll()方法進行喚醒。
sleep()方法可以指定時間段,如sleep(1000),表示線程休眠1秒。而wait()方法不可以指定時間,必須要等待其他線程進行喚醒。
sleep()方法是靜態方法,可以直接通過Thread.sleep()來調用。而wait()方法是非靜態方法,需要通過鎖對象來調用,如synchronized(obj) { obj.wait(); }。
因此,sleep()方法主要用于控制線程的執行間隔時間,而wait()方法主要用于線程之間的協作和通信。