class Resource
{
private String name;
private int count = 1;
//定義一個鎖對象。
private final Lock lock = new ReentrantLock();
//獲取鎖上的Condition對象。為了解決本方喚醒對方的問題。可以一個鎖創建兩個監視器對象。
//定義標記。
private boolean flag = false;
//1,提供設置的方法。
public void set(String name)//
{
//獲取鎖。
lock.lock();
try{
while(flag)
try{this.wait();}catch(InterruptedException e){}
this.name = name + count;
count++;//2 3 4
System.out.println(Thread.currentThread().getName()+"......生產者...."+this.name);
//將標記改為true。
flag = true;
//執行的消費者的喚醒。喚醒一個消費者就哦了。
this.notifyAll;
}finally{
lock.unlock();//一定要執行。
}
}
public void out()//
{
lock.lock();
try{
while(!flag)
try{this.wait();}catch(InterruptedException e){}//t3等 //t4等
System.out.println(Thread.currentThread().getName()+"....消費者...."+this.name);//消費 商品1
//將標記該為false。
flag = false;
//
this.notifyAll;
}
finally{
lock.unlock();
}
}
}
http://www.cnblogs.com/happyPawpaw/archive/2013/01/18/2865957.html
http://blog.csdn.net/zll793027848/article/details/8680785