package cn.lnu.thread.newInfo;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//��������-�����߶���Ҫ��������Դ
public class Resource2 {
private String name;
private int count=1;
private boolean flag=true;//��ʾ�����������
//������Lock��
private Lock lock=new ReentrantLock();
//������Lock�ļ���������,��������
//������������lock����
private Condition producer_con=lock.newCondition();
//������������lock����
private Condition consumer_con=lock.newCondition();
//�ṩһ���������߸���Դ��ֵ�ķ���
public void setRes(String name){
//�����
lock.lock();
try{
while(flag){//�жϱ��Ϊtrue,ִ��wait�ȴ���Ϊfalse������
try {
producer_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.name=name+"---"+count;
count++;
System.out.println(Thread.currentThread().getName()+"------������------"+this.name);
//������ϣ�����Ǹ�Ϊtrue
flag=true;
//������ϣ�Ӧ�û���һ��������������
consumer_con.signalAll();
}finally{
//�ͷ���
lock.unlock();
}
}
//�ṩһ����������ȡ��Ʒ�ķ���
public void getRes(){
//�����
lock.lock();
try{
while(!flag){//���û����Ʒ�������ѣ���ȴ�
try {
consumer_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"------------������---------"+this.name);
//������ϣ�����Ǹ�Ϊfalse
flag=false;
//������ϣ�Ӧ�û���һ������������
producer_con.signalAll();
}finally{
//�ͷ���
lock.unlock();
}
}
}