最近在学习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();
}
}