java 線程“生產/消費”模型1


/*資源類*/
public class ShareValue {private int total;public ShareValue(int total){this.total=total;}//生產void putValue(int value){total+=value;}//消費資源int getValue(int value){if(total-value>=0){total-=value;}else{value=total;total=0;System.out.println("Empty!");}return value;}//得到當前的資源值int getNowTotal(){return total;}}/*  生產者類 */
class Producer extends Thread {// 共享的ShareValue對象ShareValue share;// 要增加的值int value;public Producer(String name, ShareValue share, int value) {super(name);this.share = share;this.value = value;}public void run() {//同步share對象 ,直到當前代碼塊運行完畢后,share的對象鎖才會釋放synchronized (share) {// 在增加之前獲取share的total值int n = share.getNowTotal();try {sleep(100);} catch (InterruptedException e) {System.out.println(e);}share.putValue(value);// 打印增加之前的total的值n,增加的值value和增加之后total的值System.out.println(getName() + ",Value:" + n + " Put value:"+ value + " Total value:" + share.getNowTotal());}}
}/*消費者類*/
class Consumer extends Thread{//共享的ShareValue對象ShareValue share;//要減少的值int value;public Consumer(String name,ShareValue share, int value) {super(name);this.share = share;this.value = value;}public void run(){	//同步share對象,直到當前代碼運行完畢后,share的對象鎖才會釋放synchronized (share) {//在減少之前,獲取share對象的total值int n=share.getNowTotal();try {sleep(100);} catch (InterruptedException e) {System.out.println(e);}share.getValue(value);//打印減少之前的total的值n,減去的值value和減少之后total的值System.out.println(getName()+",Value:"+n+" Get value:"+value+" Total value:"+share.getNowTotal());}}
}/*  測試主類 */
public class TestDemo {public static void main(String[] args) {ShareValue share=new ShareValue(0);Producer producer1=new Producer("producer1", share, 100);Producer producer2=new Producer("producer2",share,200);Consumer consumer=new Consumer("consumer", share, 50);producer1.start();producer2.start();consumer.start();}}
/* 通過對share對象的鎖定來達到同步的目的  */

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374171.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374171.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHP - 代碼分離

總代碼&#xff1a; <?php/** Version&#xff1a;1.0* CreateTime&#xff1a;2015年11月11日* Author&#xff1a;HF_Ultrastrong*///引入公共文件,在公共文件中創建&#xff0c;相對于項目的絕對路徑require dirname(__FILE__)./includes/common.inc.php; ?&…

原生js封裝table表格操作,獲取任意行列td,任意單行單列方法

V1.001更新增加findTable-min.js 本次更新&#xff0c;優化了代碼性能方面&#xff0c;增加了部分新功能&#xff0c;可以獲取多個table表格批量操作。 考慮到本人后面的項目中可能涉及到大量的表格操作&#xff0c;提前先封了 一個簡單的操作方法&#xff0c;日后再加完善&…

Spring陷阱:事務測試被認為是有害的

Spring殺手級功能之一是容器內集成測試 。 盡管EJB多年來一直缺乏此功能&#xff08;Java EE 6終于解決了這個問題&#xff0c;但是我還沒測試過&#xff09;&#xff0c;但是Spring從一開始就允許您從Web層開始&#xff0c;通過所有服務來測試整個堆棧。到數據庫的方式。 數據…

python xlwt寫入已有表_Python中,添加寫入數據到已經存在的Excel文件

1.安裝xlrd、xlwt、xlutilshttps://pypi.org/project/xlutils/pip安裝&#xff1a;cmd下輸入&#xff1a;pip install xlrd #讀取exclepip install xlwt #寫入exclepip install xlutils #操作 Excel 文件的實用工具&#xff0c;如復制、分割、篩選等2.代碼主要部分實現import x…

java線程“生產/消費”模型2

/* 資源類 */ class ShareValue {private int total;//判斷對象是否為空private boolean isEmptytrue;//判斷對象是否已滿private boolean isFulltrue;public ShareValue(int total) {this.total total;if(total>0) isEmptyfalse;if(total<1000) isFullfalse;}/** sync…

linux更改用戶名_破舊安卓手機第二春,在安卓手機上使用Linux_deploy運行Linux

由于服務器位于國外&#xff0c;害怕被墻掉導致數據丟失&#xff0c;所以在本地寫了腳本每小時從服務器上導出并下載到本地。但是電腦不可能二十四小時開機&#xff0c;所以很想買一個樹莓派4玩玩。但是太貴遼&#xff0c;還好搜索到了Android運行Linux的方法&#xff0c;下面記…

關于Cocos2d-x中init方法和onEnter方法的區別

init()和onEnter()這兩個方法都是寫實例化對象的類(比如繼承自Node的一些類等等)的時候用到的方法。 一般都是public類型下面的 bool init(); void onEnter(); 兩個方法在實現的時候都要先執行父類方法&#xff0c;比如 Node::init(); Node::onEnter(); 注意&#xff1a; 1.ini…

在5分鐘內在MacOSX Lion中設置JAVA_HOME,MAVEN_HOME,ANT_HOME

人們一直試圖通過Mac上的Java開發世界來解決這個問題&#xff0c;這一直是我一直遇到的問題。 他們必須解決的第一件事就是設置適當的工具和環境。 幸運的是&#xff0c;足夠多的MacOSX &#xff08;Lion或以前的版本&#xff09;仍然有許多重要的工具可用于Java開發&#xff0…

MCUXpress IDE常用設置

NXP的開發工具Xpress是基于eclipse制作的&#xff0c;我們如果需要設置一些東西可以直接搜索eclipse是怎么設置的。 1、字體大小 搜索eclipse字體大小&#xff0c;菜單Window > Preference 而Xpress是漢化了的&#xff0c;英語不好的同學可能懵逼&#xff0c;其實就是菜單欄…

C語言中空格符、空字符、字符數組結束符、換行、回車的區別

空格符和空字符是不一樣的,在ASCII里面,空格(space)符號的ASCII碼是32,而空字符是0, 2個是完全不一樣的2個字符 空字符 一般來描述一個字符串的結尾,其實是控制符的一種,但不能理解為沒有字符,應該理解為代表什么都沒有的字符.好比回車0x0A和換行0x0D雖然不顯示,但是也是控制字…

hdu5823 (附帶數的二進制子集)

二進制數子集的取法,結果不會輸出0&#xff0c;且從大到小 for(int i0 i;i0;i0(i0-1)&i)cout<<i0<<endl; 題意&#xff1a; 給定一個 N個點的圖&#xff0c; 求它的每一個子圖的最小染色數 染色方法是所有子圖中相連接兩點顏色不一致 其中 N≤18 題解&…

anaconda如何卸載庫_小白必看!Anaconda安裝全攻略

本文作者&#xff1a;戴 雯文字編輯&#xff1a;方 言技術總編&#xff1a;張馨月爬蟲俱樂部云端課程來襲&#xff01;爬蟲俱樂部將于2020年8月25日至28日在線上舉行Stata數據分析法律與制度專題訓練營&#xff0c;主要是為了讓學員掌握Stata軟件進階操作&#xff0c;涉及…

RESTful Web服務可發現性,第4部分

這是有關使用Spring 3.1和Spring Security 3.1和基于Java的配置來建立安全的RESTful Web Service的系列文章的第四篇 。 本文將重點介紹REST API&#xff0c;HATEOAS的可發現性以及由測試驅動的實際方案。 引入REST可發現性 API的可發現性是一個值得引起足夠關注的主題&#x…

10位IT領袖給應屆畢業生的10條忠告

10位IT領袖給應屆畢業生的10條忠告&#xff0c;在走向獨立和自主的偉大征程中&#xff0c;吸取他們的經驗。 在畢業生們邁出象牙塔之時&#xff0c;他們應該聽從哪些人的建議&#xff1f;在走向獨立和自主的偉大征程中&#xff0c;他們該吸取哪些教訓&#xff1f;聽一聽各領域…

ubuntu安裝好后常用軟件安裝和配置

1、安裝vim sudo apt install vim 安裝好后進入路徑打開vimrc文件&#xff0c;這里需要注意一定要用sudo不然編輯后無法保存&#xff01; cd /etc/vim sudo vim vimrc 在最下面加入 set nu set ts4 set softtabstop4 set shiftwidth4 set expandtab set autoindent 依次是…

Objective-c 數據類型

這里列出Objective-c中獨有數據類型&#xff1a; 一、字符串 在Objective-c中&#xff0c;字符串常量是由和一對從引號括起的字符串序列。比如&#xff1a;"China"、"objective-c"等都是合法的字符串常量。 二、id類型 id類型是Objective-c中一個比較獨…

JBoss AS 7 EJB3池配置

現在&#xff0c;AS 7.0.1已經發布&#xff0c;讓我們看一下可用的EJB3新功能。 就像我在上一篇文章中提到的那樣 &#xff0c;AS 7.0.1現在允許您為無狀態會話bean和MDB配置池。 當前&#xff0c;我們允許在子系統級別配置池&#xff0c;這意味著該池將適用于服務器上部署的所…

iOS開發網絡篇—文件的上傳

說明&#xff1a;文件上傳使用的時POST請求&#xff0c;通常把要上傳的數據保存在請求體中。本文介紹如何不借助第三方框架實現iOS開發中得文件上傳。 由于過程較為復雜&#xff0c;因此本文只貼出部分關鍵代碼。 主控制器的關鍵代碼&#xff1a; YYViewController.m 1 #import…

var模型的matlab實現_Eviews中VAR模型的操作、脈沖響應分析和方差分解的實現

打開文件所在位置&#xff0c;獲取數據。選中變量右鍵open打開var操作EViews,在VAR對象的工具欄中選擇“View”|“Lag Structure”|“AR Roots Table/ AR Roots Graph”選項&#xff0c;得到AR根的表和圖。結果顯示&#xff1a;VAR模型所有根模的倒數都小于1&#xff0c;即都在…

一個程序員的愛情表白書

我能抽象出整個世界 但是我不能抽象出你 因為你在我心中是那么的具體 所以我的世界并不完整 我可以重載甚至覆蓋這個世界里的任何一種方法 但是我卻不能重載對你的思念 也許命中注定了 你在我的世界里永遠的烙上了靜態的屬性 而我不慎調用了愛你這個方法 當我義無返顧的…