上集说的wait和notify关键字是配合synchronized使用的,而对于同步锁来说则另有配合
//共享资源对象
public class ShareResource {
private String name;
private String gender;
private boolean isEmpty=true;
private final Lock lock=new ReentrantLock();
private Condition condition=lock.newCondition();
/*
* 生产者向公共对象中储存数据
* 储存的姓名
* 储存的性别
*/
public void push(String name,String gender)
{
lock.lock();
try {
while(!isEmpty)
{
condition.await();
}
this.gender=gender;
Thread.sleep(10);
this.name=name;
//生产结束
isEmpty=false;
condition.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
}finally
{
lock.unlock();
}
}
/*
* 消费者从公共对象中取出数据
*/
public void popup()
{
lock.lock();
try {
while(isEmpty)
{
condition.await();
}
Thread.sleep(10);
System.out.println(this.name+" "+this.gender);
//消费结束
isEmpty=true;
condition.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
}finally
{
lock.unlock();
}
}
}
即为用await和signal配合
效果一样