建立資源物件,提供儲存和取出方法(使用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...