关于线程安全问题

2016.12.01

明天就开始了,一点书都看不进去,还是撸代码吧,现在想把基础打牢一点,所以还要自己看下书。

java的同步机制解决了线程安全问题,但也引发了死锁现象。

死锁现象出现的根本原因是

1.存在两个或者是两个以上的线程。

2.存在两个或者是两个以上的共享。

死锁现象没有解决方案,只能避免。

下面用一段代码实现。

class DeadLock extends Thread{
	
	public DeadLock(String name){
		super(name);//相当于调用父类的构造函数,如果没有这个就不能初始化父类
	}
	
	
	public void run() {
		if("庹成".equals(Thread.currentThread().getName())){
			synchronized ("遥控器") {
				System.out.println("庹成拿到了遥控器,准备 去拿电池!!");
				synchronized ("电池") {
					System.out.println("庹成拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
				}
			}
		}else if("崔宝文".equals(Thread.currentThread().getName())){
			synchronized ("电池") { 
				System.out.println("崔宝文拿到了电池,准备去拿遥控器!!");
				synchronized ("遥控器") {
					System.out.println("崔宝文拿到了遥控器与电池了,开着空调爽歪歪的吹着...");
				}
			}
			
		}	
	}
		
}

public class Demo2 {

	public static void main(String[] args) {
		DeadLock d1 = new DeadLock("庹成");
		DeadLock d2 = new DeadLock("崔宝文");
		//开启线程
		d1.start();
		d2.start();	
	}	
}

  运行结果会出现:

  庹成拿到了遥控器,准备 去拿电池!!

  崔宝文拿到了电池,准备去拿遥控器!!

  没啦。。

猜你喜欢

转载自3056434592.iteye.com/blog/2342377