多執行緒通訊問題

2021-10-22 16:18:33 字數 2831 閱讀 4579

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...