Java多執行緒 執行緒間的通訊

2021-07-31 01:19:44 字數 1789 閱讀 5841

①wait/notify 必須與synchronized關鍵字配合使用。

②wait方法釋放鎖,notify方法不釋放鎖。

示例乙個阻塞佇列

public

class myqueue

//5 初始化乙個物件 用於加鎖

private final object lock = new object();

//put(anobject): 把anobject加到blockingqueue裡,如果blockqueue沒有空間,則呼叫此方法的執行緒被阻斷,直到blockingqueue裡面有空間再繼續.

public

void

put(object obj) catch (interruptedexception e)

}//1 加入元素

list.add(obj);

//2 計數器累加

count.incrementandget();

//3 通知另外乙個執行緒(喚醒)

lock.notify();

system.out.println("新加入的元素為:" + obj);}}

//take: 取走blockingqueue裡排在首位的物件,若blockingqueue為空,阻斷進入等待狀態直到blockingqueue有新的資料被加入.

public object take() catch (interruptedexception e)

}//1 做移除元素操作

ret = list.removefirst();

//2 計數器遞減

count.decrementandget();

//3 喚醒另外乙個執行緒

lock.notify();

}return ret;

}public

intgetsize()

public

static

void

main(string args)

},"t1");

t1.start();

thread t2 = new thread(new runnable()

},"t2");

try catch (interruptedexception e)

t2.start();

}}

private

volatile

static list list = new arraylist();

public

void

add()

public

intsize()

public

static

void

main(string args)

}

//}} catch (interruptedexception e)

}}, "t1");

thread t2 = new thread(new runnable() catch (interruptedexception e)

}system.out.println("當前執行緒:" + thread.currentthread().getname() + "收到通知執行緒停止..");

throw

new runtimeexception();

//}}

}, "t2");

t2.start();

t1.start();

}

Java多執行緒 執行緒間通訊

一,等待 通知機制 實現執行緒間的通訊 舉個例子 我們去飯店就餐,飯店上餐的時間不確定,如果我們一直去詢問前台,是不是很煩,我麼這時就處於等待 wait 狀態,但是 飯店肯定會有人肯定會通知 notify 那個桌的菜已經做好了,前台就會通知這桌的人,菜來了。1,主要的方法wait notify 這個...

JAVA 多執行緒 執行緒間的通訊

程式設計間通訊 其實就是多個執行緒在操作同乙個資源 但是操作的動作不同 wait notify notifyall 都使用在同步中,因為要對持有的監視器 鎖 的執行緒操作 所以要使用在同步中,因為只有同步才具有鎖 將這些操作執行緒的方法定義在object類中的原因是因為這些方法在操作同步執行緒時,都...

Java多執行緒 4 執行緒間通訊

有這麼幾個方法,它們就定義在大家都非常熟悉的object類中,但是大家卻從來沒有呼叫過,並且也不知道是做什麼的,今天就由我帶著你們熟悉一下下面的這三個方法。它們都是定義在object類中的final方法,並且只能在synchronized上下文中呼叫。如果你現在還不明白,沒關係,下面我會用乙個 生產...