多线程:管cheng法
生活随笔
收集整理的這篇文章主要介紹了
多线程:管cheng法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package com.wuming.thread;//測試:生產(chǎn)者消費(fèi)者模型,利用緩沖區(qū)解決:管程法
//生產(chǎn)者,消費(fèi)者,產(chǎn)品,緩沖區(qū)
public class TestPC {public static void main(String[] args) {SynContainer container = new SynContainer();new Productor(container).start();new Consumer(container).start();}}
//生產(chǎn)者
class Productor extends Thread{SynContainer container;public Productor(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("生產(chǎn)了"+ i +"只雞");container.push(new Chicken(i));}}
}
//消費(fèi)者
class Consumer extends Thread{SynContainer container;public Consumer(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("消費(fèi)了-->"+container.pop().id+"只雞");}}
}
//產(chǎn)品
class Chicken{int id;//產(chǎn)品編號public Chicken(int id) {this.id = id;}
}
//緩沖區(qū)
class SynContainer{//需要一個容器大小Chicken[] chickens=new Chicken[10];//計(jì)數(shù)器int count=0;//生產(chǎn)者放入產(chǎn)品public synchronized void push(Chicken chicken){//如果容器滿了,就需要等待消費(fèi)者消費(fèi)if (count==chickens.length){//通知消費(fèi)者消費(fèi),生產(chǎn)等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果沒有滿,我們就需要丟入產(chǎn)品chickens[count]=chicken;count++;//可以通知消費(fèi)者消費(fèi)了this.notify();}//消費(fèi)者消費(fèi)產(chǎn)品public synchronized Chicken pop(){//判斷能否消費(fèi)if (count==0){//等待生產(chǎn)者生產(chǎn),消費(fèi)者等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果可以消費(fèi)count--;Chicken chicken=chickens[count];//吃完啦,通知生產(chǎn)者生產(chǎn)this.notify();return chicken;}
}
生產(chǎn)了0只雞
生產(chǎn)了1只雞
生產(chǎn)了2只雞
生產(chǎn)了3只雞
生產(chǎn)了4只雞
生產(chǎn)了5只雞
生產(chǎn)了6只雞
生產(chǎn)了7只雞
生產(chǎn)了8只雞
生產(chǎn)了9只雞
生產(chǎn)了10只雞
生產(chǎn)了11只雞
消費(fèi)了-->9只雞
消費(fèi)了-->10只雞
消費(fèi)了-->8只雞
消費(fèi)了-->7只雞
消費(fèi)了-->6只雞
消費(fèi)了-->5只雞
消費(fèi)了-->4只雞
消費(fèi)了-->3只雞
消費(fèi)了-->2只雞
消費(fèi)了-->1只雞
消費(fèi)了-->0只雞
。。。。。。。
總結(jié)
以上是生活随笔為你收集整理的多线程:管cheng法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么使用lambda表达式
- 下一篇: CTF-Bugku逆向题Android方