生产者消费者两种死锁方式

方式1:
class Resource{
	private String name;
	private int num=1;
	private boolean mark=false;
	
	public synchronized void pro(String name){
		if(mark)
			try{this.wait();}catch(Exception e){}
		//if(!mark){  //加上这句会死锁,死锁位置随机
			this.name=name+"  ,"+num++;
			System.out.println(Thread.currentThread().getName()+"                   produce comodity: "+this.name);
			mark=true;
			this.notify();
		//}
	}
	
	public synchronized void print(){
		if(!mark)
			try{this.wait();}catch(Exception e){};
		//if(mark){//加上这句会死锁,死锁位置随机
			System.out.println(Thread.currentThread().getName()+"consume comodity: "+name);
			mark=false;
			this.notify();
		//}
	}
	
}
方式2:
class Resource{
	private String name;
	private int num=1;
	private boolean mark=false;
	
	public synchronized void pro(String name){
		while(mark)//加while避免自我唤醒,但是会造成死锁
			try{this.wait();}catch(Exception e){}
		
			this.name=name+"  ,"+num++;
			System.out.println(Thread.currentThread().getName()+"                   produce comodity: "+this.name);
			mark=true;
			this.notify();
		
	}
	
	public synchronized void print(){
		while(!mark)//加while避免自我唤醒,但是会造成死锁
			try{this.wait();}catch(Exception e){};
	
			System.out.println(Thread.currentThread().getName()+"consume comodity: "+name);
			mark=false;
			this.notify();
		
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值