线程的死锁

关于线程的同步,http://buaawhl.iteye.com/blog/164905这篇文章讲的非常好!

 

线程的死锁:

线程1锁住了对象A的监视器,等待对象B的监视器,线程2锁住了对象B的监视器,等待对象A的监视器,就造成了死锁。

 

代码示例:

class TicketsSystem
{
	public static void main(String[] args)
	{
		SellThread st=new SellThread();
		
		new Thread(st).start();
		try
		{
			Thread.sleep(1);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		st.b=true;
		new Thread(st).start();
		//new Thread(st).start();
		//new Thread(st).start();
	}
}

class SellThread implements Runnable
{
	int tickets=100;
	Object obj=new Object();
	boolean b=false;
	public void run()
	{
		if(b==false)
		{
			while(true)
				sell();
		}
		else
		{
			while(true)
			{
				synchronized(obj)
				{
					try
					{
						Thread.sleep(10);
					}
					catch(Exception e)
					{
						e.printStackTrace();
					}
					synchronized(this)
					{
						if(tickets>0)
						{
							
							System.out.println("obj:"+Thread.currentThread().getName()+
									" sell tickets:"+tickets);
							tickets--;
						}
					}
				}
			}
		}
	}
	public synchronized void sell()
	{
		synchronized(obj)
		{
			if(tickets>0)
			{
				try
				{
					Thread.sleep(10);
				}
				catch(Exception e)
				{
					e.printStackTrace();
				}
				System.out.println("sell():"+Thread.currentThread().getName()+
						" sell tickets:"+tickets);
				tickets--;
			}
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值