總結 Java多執行緒中wait和sleep的區別

2021-06-29 14:50:25 字數 1107 閱讀 1345

一、對wait和sleep的個人理解

wait表示等待的意思,當執行緒呼叫wait方法時,執行緒將會處於等待狀態,如果想要再次執行呼叫過wait方法的執行緒需要將其喚醒,使其脫離等待狀態

sleep表示休眠的意思,這種休眠是有時間限制的,休眠時間到了執行sleep方法的執行緒會繼續執行下去

二、區別:

(1)wait()被定義在object類中,它有函式的過載形式,可以有毫秒值,也可以沒有

(2)sleep()被定義在thread類中,並且是乙個static方法,必須有毫秒值

(3)wait()釋放cpu執行權,釋放鎖

(4)sleep()釋放cpu執行權,不釋放鎖

(5)wait()必須寫在同步**塊中,也就是說需要有鎖的支援

(6)sleep()可以寫在任意地方,但是具體讓哪個執行緒休眠,取決於哪個執行緒在執行該**

**演示等待-喚醒機制:

//執行緒間通訊-等待喚醒機制

package thread;

class

resource1

}class

input1

implements

runnable

public

void run()

catch (interruptedexception e)

}if(i%2==0)

else

resource.flag=false;

resource.notify();

}

i++;

}

}}class

output1

implements

runnable

public

void run()

catch (interruptedexception e)

}system.out.println(resource);

resource.flag=true;

resource.notify();}}

}}public

class

threaddemo4

}

Java多執行緒中notify和wait的問題

size medium 程式功能 4個執行緒,2個執行緒對某個數值進行加1 2個執行緒進行減1,要求該數在0和1之間切換。程式如下,大家看看問題出在 size decthread類,對sample的i進行減1的執行緒 public class decthread extends thread ove...

JAVA多執行緒 sleep和wait的區別

1 這兩個方法來自不同的類分別是,sleep來自thread類,和wait來自object類。sleep是thread的靜態類方法,誰呼叫的誰去睡覺,即使在a執行緒裡呼叫了b的sleep方法,實際上還是a去睡覺,要讓b執行緒睡覺要在b的 中呼叫sleep。2 最主要是sleep方法沒有釋放鎖,而wa...

linux shell程式設計多執行緒和wait命令學習

最近在使用shell做一些部署工作,在使用過程中,效率一直不高。想提高效率,經過分析發現,並不是所有操作都是需要序列的,一些操作是可以進行並行操作的。經過學習,shell裡面也是可以進行多執行緒程式設計的,而且十分方便,同時,wait命令可以進行shell的多執行緒同步控制。下面是shell多執行緒...