多執行緒 單生產單消費模型

2021-08-19 16:25:05 字數 1972 閱讀 2822

建立資源物件,提供儲存和取出方法(使用synchronized**塊實現)

/**

* created by shaoqinghua on 2018/5/3.

* 定義乙個負責儲存和取出的資源類

*/public

class

resource catch (interruptedexception e)

}objs[0] = obj;

system.out.println(thread.currentthread().getname() + " 正在儲存的資料:" + objs[0]);

//在生產者儲存完資料後,需要喚醒消費執行緒

lock.notify();}}

/*** 取出資料

*/public

void

get() catch (interruptedexception e)

}system.out.println(thread.currentthread().getname() + "正在取出的資料:::::::" + objs[0]);

objs[0] = null;

//消費結束,需要通知生產者執行緒

lock.notify();}}

}

建立生產者任務類

/**

* created by shaoqinghua on 2018/5/3.

*/public

class

productor

implements

runnable

@override

public

void

run()

}}

建立消費者任務類

/**

* created by shaoqinghua on 2018/5/3.

*/public

class

consumer

implements

runnable

@override

public

void

run()

}}

測試類

/**

* created by shaoqinghua on 2018/5/3.

* 測試單生產單消費

*/public

class

threadtest

}

另外,resource資源類也可使用jdk5之後的lock和condition實現

/**

* created by shaoqinghua on 2018/5/3.

* 定義乙個負責儲存和取出的資源類

*/public

class

resource catch (interruptedexception e)

}objs[0] = obj;

system.out.println(thread.currentthread().getname() + " 正在儲存的資料:" + objs[0]);

//在生產者儲存完資料後,需要喚醒消費執行緒

concon.signal();

} finally

}/**

* 取出資料

*/public

void

get() catch (interruptedexception e)

}system.out.println(thread.currentthread().getname() + "正在取出的資料:::::::" + objs[0]);

objs[0] = null;

//消費結束,需要通知生產者執行緒

procon.signal();

} finally

}}

執行緒 單生產者單消費者

單生產者單消費者 乙個生產線成乙個消費執行緒 乙個生產任務乙個消費任務 乙個產品 public class demo5 產品類class p catch interruptedexception e this.name name this.price price system.out.println...

單生產單消費多生產多消費問題的解決及使用機制

wait 等待,釋放鎖。notify 喚醒多個等待中的某乙個,僅喚醒乙個 notifyall 喚醒所有的等待 使用任務協作的時候,都是用wait和notify或notifyall技術解決。1.論 單生產 單消費 純粹的使用wait和notify,會進入死鎖狀態。死鎖 都進入等待,沒人喚醒 即 有執行...

單生產者,單消費者

單個生產者和單個消費者 include include include include include include define buffer size 5 產品庫存大小 define product cnt 50 產品生產總數 struct product cons buffer void i...