生产者消费者问题

最近在学习java多线程,有一道题目感觉很不错,和大家一起分享下

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


class Bag1
{
private int count=1;
private String name;
boolean flag = false;
final Lock lock = new ReentrantLock();   //Lock是一个接口这里
final Condition cun = lock.newCondition(); //Condition()是一个接口,lock.newCondition返回一个
  //Condition 实例
final Condition pro = lock.newCondition();
public  void set(String name)
{
lock.lock();//程序进来,锁住当前线程

try {
while(flag)
pro.await();//生产线程等待
this.name = name+"-------"+count++;
System.out.println("生产者生产*************"+this.name);
flag = true;
cun.signal();//通知消费线程

  } catch (InterruptedException e) 
{
e.printStackTrace();
}
finally{
lock.unlock(); //释放线程锁
}

}
public void get()
{
lock.lock();

try
{
while(!flag)
cun.await();
System.out.println("消费者消费-----------------"+name);
flag = false;
pro.signal();
}
catch(InterruptedException e)
{
e.printStackTrace();
}
finally
{
lock.unlock();
}
}
}


class Cunsomer3 implements Runnable
{
private Bag1 Bag1;
public Cunsomer3(Bag1 Bag1)
{
this.Bag1=Bag1;
}
public void run()
{
while(true)
{
Bag1.set("苹果");
}
}
}
class Producer3 implements Runnable
{
private Bag1 Bag1;
Producer3(Bag1 Bag1)
{
this.Bag1=Bag1;
}
public void run()
{
while(true)
{
Bag1.get();
}
}
}
public class Test06 
{
public static void main(String[] args)
{
Bag1 Bag1 = new Bag1();
Cunsomer3 c1 = new Cunsomer3(Bag1);
Producer3 p1 = new Producer3(Bag1);


Thread th1 = new Thread(c1);
Thread th2 = new Thread(c1);
Thread th3 = new Thread(p1);
Thread th4 = new Thread(p1);
th1.start();
th2.start();
th3.start();
th4.start();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值