昨天沒有時間寫完這篇,今天補上,前面只說明了wait和notify這兩個方法,這裡討論一下sleep和join,說實在的這兩個方法比wait和notify簡單的多.
http://blog.csdn.net/treeroot/archive/2004/11/10/175508.ASPx
sleep:Thread的靜態方法,當前線程休眠一段時間,時間到了再恢復可運行狀態,時間到了不一定就執行吧,還得競爭CPU呢.
join:這個方法其實就是非凡的wait,wait方法一般都需要別人notify(當然也可以設置超時),但是join方法就不需要別人notify了,一直等到這個線程死亡(就相當於這個線程臨時前告訴那些在等它的人:你們進來吧!)
本人不是很會舉例子,還是兩個人公用一個衛生間吧,這回不刷牙了,改洗澡吧,總不能兩個人同時洗澡吧!就算可以,這裡假設不可以吧.情況時這樣的:A在洗澡,B要等。
第一種情況:
B很聰明的,A洗澡可能要20分鐘到1小時,我就先睡10分鐘看看好了沒有,沒有好就再睡10分鐘,最多多等10分鐘而已吧.
class Syn
{
public static void main(String[] args) throws Exception
{
Thread a=new Bathing();
a.start();
//B
int time=0;
while(a.isAlive()){
Thread.sleep(10000);
time+=10;
System.out.println("B has waited "+time+" minutes");
}
System.out.println("B can bath now!");
}
}
class Bathing extends Thread
{
public void run(){
bathing();
}
private void bathing() {
System.out.println("A is bathing !");
try{Thread.sleep(20000);}catch(InterruptedException e){e.printStackTrace();}
//延遲20秒看效果
System.out.println("A has bathed !");