notify()
喚醒正在此物件監視器上等待的單個執行緒。
wait()
導致當前執行緒等待它被喚醒,通常是 通知或 中斷 。
wait(long timeoutmillis)
導致當前執行緒等待它被喚醒,通常是 通知或 中斷 ,或者直到經過一定量的實時。
wait(long timeoutmillis, int nanos)
導致當前執行緒等待它被喚醒,通常是 通知或 中斷 ,或者直到經過一定量的實時。
兩個執行緒,睡著、喚醒,相互互動執行任務
package xc;
public
class
demo11
//廚師
static
class
cook
extends
thread
@override
public
void
run(
)else}}
}//服務員
static
class
waiter
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)
f.get();
}}}//食物
/** * 相當於乙個盤子,只new乙個物件
*/static
class
food
catch
(interruptedexception e)
this
.taste = taste;
}public
void
get()}
}
結果:
將food方法裡加上synchronized結果會怎麼樣呢
package xc;
public
class
demo11
//廚師
static
class
cook
extends
thread
@override
public
void
run(
)else}}
}//服務員
static
class
waiter
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)
f.get();
}}}//食物
/** * 相當於乙個盤子,只new乙個物件
*/static
class
food
catch
(interruptedexception e)
this
.taste = taste;
}public
synchronized
void
get()}
}
顯然更不行了,因為回首掏的機率更大,有可能服務員一連送好幾餐加上wait()方法,確保下一次執行的物件
加乙個狀態,看此時是誰在操作food,true是廚師生產(防止回首掏)
package xc;
public
class
demo11
//廚師
static
class
cook
extends
thread
@override
public
void
run(
)else}}
}//服務員
static
class
waiter
extends
thread
@override
public
void
run(
)catch
(interruptedexception e)
f.get();
}}}//食物
/** * 相當於乙個盤子,只new乙個物件
這就沒有問題了
多執行緒通訊問題公升級
package com.dhcc.thread public class resource catch interruptedexception e this.name name count count system.out.println thread.currentthread getname ...
多執行緒的通訊問題
1 當多個執行緒併發執行時,在預設情況下cpu是隨機切換執行緒的,每個執行緒執行的次序都是隨機的。2 如果我們需要多個執行緒共同完成乙個任務,並且希望他們有規律的執行 有可能是多執行緒間交替執行,有可能是當某個執行緒達到某個條件後才讓其他執行緒執行 就需要執行緒之間協調通訊。3 我認為處理執行緒安全...
執行緒通訊,多執行緒
多執行緒 thread handler thread處理一些複雜的業務邏輯 耗時的事情 handler在主線程中接收訊息的乙個物件 mhandler.sendmessage msg 傳送乙個訊息物件 mhandler.sendemptymessage what 傳送空訊息,只有what沒有obj m...