Java(三)并发控制11.等待唤醒关键字

上集说的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配合
效果一样
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37282683/article/details/82869874