java提供繼承Thread類和實現(xiàn)runnable接口這兩種方式來實現(xiàn)線程
Java中sleep和wait的區(qū)別:
∪鹦拧① 這兩個方法來自不同的類分別是顷帖,sleep來自Thread類,而wait來自Object類鼎文。
sleep是Thread的靜態(tài)類方法渔肩,誰調用的誰去睡覺,即使在a線程里調用b的sleep方法拇惋,實際上還是a去睡覺 周偎,要讓b線程睡覺要在b的代碼中調用sleep。
〕盘② 鎖:最主要是sleep方法沒有釋放鎖蓉坎,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法胡嘿。
sleep不出讓系統(tǒng)資源蛉艾;wait是進入線程等待池等待,出讓系統(tǒng)資源衷敌,其他線程可以占用CPU伺通。一般wait不會 加時間限制,因為如果wait線程的運行資源不夠逢享,再出來也沒用罐监,要等待其他線程調用notify/notifyAll喚 醒等待池中的所有線程,才會進入就緒隊列等待OS分配系統(tǒng)資源瞒爬。sleep(milliseconds)可以用時間指定使它自動喚醒過來弓柱,如果時間不到只能調用interrupt()強行打斷。
Thread.sleep(0)的作用是“觸發(fā)操作系統(tǒng)立刻重新進行一次CPU競爭”侧但。
∈缚铡③ 使用范圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用禀横,而sleep可以在任何 地方使用屁药。
synchronized(x){
x.notify()
//或者wait()
}