码迷,mamicode.com
首页 > 编程语言 > 详细

java:同步和死锁

时间:2016-12-10 22:22:08      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:stack   png   bsp   public   har   tar   over   rri   rup   

多个线程共享一个资源的时候需要进行同步(否则会出现错误:如负数,重复数),但是过多的同步会造成死锁.

synchronized(this)

{

 

}

非同步情况:

public class SyncThread implements Runnable {

	private int titick = 5;
	
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		
		for(int i = 0; i <50; i++)
		{
			
				if( this.titick > 0 )
				{
					//如果遇到延时情况,就会出错
					try {
						Thread.sleep(300);
					} catch (InterruptedException e) {
						// TODO 自动生成的 catch 块
						e.printStackTrace();
					}
					
					System.out.println("卖出去第:" + this.titick-- + "张票");
				}
			}		
		
	}

	
}

public class Demo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		SyncThread st = new SyncThread();
		new Thread(st, "票贩子A").start();
		new Thread(st, "票贩子B").start();
		new Thread(st, "票贩子C").start();

	}

}

结果:

 技术分享 

 

 

 

同步情况:

public class SyncThread2 implements Runnable {

	private int titict = 5;
	
	@Override
	public void run() {
		// TODO 自动生成的方法存根
		
		for(int i = 0; i < 50; i++)
		{
			synchronized(this)
			{
				if( this.titict > 0)
				{
					try {
						Thread.sleep(300);
					} catch (InterruptedException e) {
						// TODO 自动生成的 catch 块
						e.printStackTrace();
					}
					System.out.println("卖出:"+ this.titict--);
				}
			}
		}

	}

}

public class Demo2 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根

		SyncThread2 sy2 = new SyncThread2();
		new Thread(sy2, "票贩子1").start();
		new Thread(sy2, "票贩子2").start();
		new Thread(sy2, "票贩子3").start();
		
	}

}

  结果:

技术分享

 

java:同步和死锁

标签:stack   png   bsp   public   har   tar   over   rri   rup   

原文地址:http://www.cnblogs.com/achengmu/p/6158331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!