java 线程“生产/消费”模型1
生活随笔
收集整理的這篇文章主要介紹了
java 线程“生产/消费”模型1
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*資源類*/
public class ShareValue {private int total;public ShareValue(int total){this.total=total;}//生產(chǎn)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;}}/* 生產(chǎn)者類 */
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對象的鎖定來達到同步的目的 */
總結(jié)
以上是生活随笔為你收集整理的java 线程“生产/消费”模型1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java不要在常量和变量中出现易混淆的字
- 下一篇: 地下城与勇士主线任务半人马首领的终焉怎么