多线程之偷了个懒之经典生产消费问题
2016-11-22 17:03
197 查看
package kkk;
public class Jingdian {
public static void main(String args[]){
Clerk cl=new Clerk();
Thread prt=new Thread(new Producer(cl));//生产者线程
Thread cot=new Thread(new Consumer(cl));//消费者线程
prt.start();
cot.start();
}
}
//新建另一个类
package kkk;
public class Clerk {
private int product=0;//产品默认为0;
public synchronized void addProduct(){//生产者生成出来的产品交给店员
if(this.product>=20){//20个最大库存
try {
wait();//产品已满,请稍等在生产
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
product++;
System.out.println("生产者生产第"+product+"个产品");
notifyAll();//通知等待区的消费者今天取产品了
}
}//消费者从店员处取产品
public synchronized void getProduct(){
if(this.product<=0){
try {
wait();//产品没有货了,请稍等再取
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("消费者取走了第"+product+"个产品");
product--;
notifyAll();//通知等待区的生成者可以生产 产品
}
}
}
//新建消费类
package kkk;
//消费者线程要执行的任务
public class Consumer implements Runnable {
private Clerk cl;
public Consumer(Clerk cl){
this.cl=cl;
}
public void run(){
System.out.println("消费者开始取走产品");
while(true){
try{
Thread.sleep((int)(Math.random()*10)*100);
}catch(InterruptedException e){
e.printStackTrace();
}
cl.getProduct();//取走产品
}
}
}
//新建生产者类
package kkk;
//生产者线程要执行的任务
public class Producer implements Runnable {
private Clerk cl;
public Producer(Clerk cl){
this.cl=cl;
}
public void run(){
System.out.println("生产者开始生产产品!");
while(true){
try {
Thread.sleep((int)(Math.random()*10)*100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cl.addProduct();//生产产品
}
}
}
public class Jingdian {
public static void main(String args[]){
Clerk cl=new Clerk();
Thread prt=new Thread(new Producer(cl));//生产者线程
Thread cot=new Thread(new Consumer(cl));//消费者线程
prt.start();
cot.start();
}
}
//新建另一个类
package kkk;
public class Clerk {
private int product=0;//产品默认为0;
public synchronized void addProduct(){//生产者生成出来的产品交给店员
if(this.product>=20){//20个最大库存
try {
wait();//产品已满,请稍等在生产
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
product++;
System.out.println("生产者生产第"+product+"个产品");
notifyAll();//通知等待区的消费者今天取产品了
}
}//消费者从店员处取产品
public synchronized void getProduct(){
if(this.product<=0){
try {
wait();//产品没有货了,请稍等再取
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
System.out.println("消费者取走了第"+product+"个产品");
product--;
notifyAll();//通知等待区的生成者可以生产 产品
}
}
}
//新建消费类
package kkk;
//消费者线程要执行的任务
public class Consumer implements Runnable {
private Clerk cl;
public Consumer(Clerk cl){
this.cl=cl;
}
public void run(){
System.out.println("消费者开始取走产品");
while(true){
try{
Thread.sleep((int)(Math.random()*10)*100);
}catch(InterruptedException e){
e.printStackTrace();
}
cl.getProduct();//取走产品
}
}
}
//新建生产者类
package kkk;
//生产者线程要执行的任务
public class Producer implements Runnable {
private Clerk cl;
public Producer(Clerk cl){
this.cl=cl;
}
public void run(){
System.out.println("生产者开始生产产品!");
while(true){
try {
Thread.sleep((int)(Math.random()*10)*100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
cl.addProduct();//生产产品
}
}
}
相关文章推荐
- 多线程的经典案例(生产消费问题)
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- 生产者消费者问题 这是一个非常经典的多线程题目,题目大意如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个有多个缓冲区的缓冲池,生产者
- 多线程经典问题:馒头问题 生产和消费问题(线程的通信问题)
- 多线程之生产消费问题
- 多线程经典问题 -- 生产问题
- 多线程生产消费问题
- 多线程生产消费问题
- 多线程中多生产多消费问题
- Java 多线程间通信 多生产 多消费问题
- Java中多线程的多生产多消费问题的解决方案
- 多线程多生产多消费问题以及解决
- 经典的生产与消费线程同步问题
- 多线程中的多生产多消费问题
- java多线程之生产消费问题
- Java多线程的单生产单消费和多生产多消费问题的解决
- 【代码练习6】利用多线程生产消费问题实现熊吃蜂蜜问题
- --多线程中,单生产单消费,多生产多消费的问题
- Java模拟生产消费问题