synchronized版 生產者和消費者模式

2021-10-06 11:47:35 字數 2011 閱讀 4054

三個物件、生產者、消費者、商品庫存

商品庫存是共享的 共享的資料要進行執行緒同步安全保護
預設商品的數量為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,即使出現問題,也能快速定位問題,解決問題。但是在生產環境中,專案屬於發布外網,如果再開放這些日...