三個物件、生產者、消費者、商品庫存
商品庫存是共享的 共享的資料要進行執行緒同步安全保護
預設商品的數量為0,程式執行
1、生產者生成10個商品然後停止生成。釋放商品庫存鎖 (object.
wait())
2、消費者依次消費10個商品然後停止消費、釋放商品鎖(object.
wait
())、喚醒生成者生成(object.
notifyall()
)3、生產者生成10個商品然後停止生成。釋放商品庫存鎖(object.
wait
())、喚醒消費者消費(object.
notifyall()
) 依次迴圈2、3步驟
兩者在每次消費和生成完成後都喚醒進入阻塞狀態的執行緒、讓其進入就緒狀態、讓後它會執行、遇到synchronized進入鎖池
等上乙個執行緒結束拿到鎖然後執行 如此迴圈
總體**
package com.it.thread;
/**
* @author yeah
* @date 2020/5/25 20:02
*/public
class
waitthread
catch
(interruptedexception e)
thread2.
start()
;}}class
producer
implements
runnable
@override
public
void
run(
)catch
(exception e)
}else
catch
(interruptedexception e)
system.out.
println
("repertory+1 currentrepertory="
+repository.
getrepertory()
);// todo 2 喚醒消費者消費 當消費者第一輪消費完成的時候 消費者喚醒了生成者、而自己卻進入了阻塞狀態、這時候就需要奧生產者來喚醒
repository.
notifyall()
;}}}
}}class
consumer
implements
runnable
@override
public
void
run(
)catch
(interruptedexception e)
}else
catch
(interruptedexception e)
system.out.
println
("reducerepertory-1 currentrepertory="
+ repository.
getrepertory()
);//todo 1 喚醒生產者生成 因為生產者跳轉到消費者的時候 已經進入阻塞狀態了 不喚醒就無法跳轉到生產者
repository.
notifyall()
;}}}
}}class
repository
public
void
setrepertory
(integer repertory)
public integer getrepertory()
public
void
addrepertory()
public
void
reducerepertory()
}
執行結果
生產者消費者問題 synchronized
public class public static void main string args class depot public synchronized void produce int val int incre size surplus capacity capacity size su...
模擬生產環境使用thrift c 版
本文簡單的模擬了實際生成環境場景中使用的c s模型,使用thrift作為框架來進行開發,服務端實現了兩個介面,使用threadpoolserver模型提供服務,由於只是學習thrift相關的使用,本文的 不是很嚴謹,設計基本沒有,請閱讀本文之前最好有基本的thrift相關的知識。如 thrift檔案...
vue ts版生產環境遮蔽日誌
一 vue ts版生產環境遮蔽日誌 1.場景 我們都知道,隨著開發的除錯,我們需要在前端業務邏輯的 中列印各種介面返回或者邏輯處理的過程日誌。通過這些日誌來幫助我們驗證業務功能是否正常實現,是否存在bug,即使出現問題,也能快速定位問題,解決問題。但是在生產環境中,專案屬於發布外網,如果再開放這些日...