多线程之线程死锁

1.何为线程死锁?

 当出现多个线程相互等待均不执行时就是线程死锁

2死锁出现在哪?

开发中一定要避免线程死锁,死锁经常出现在synchronized代码嵌套操作中
 3.如何避免死锁?
 
不这样做就行了

package Lock2;
/**
 * 线程死锁
 * @author zhang
 * 
 *
 */
public class Demo01_DeadLock {
	public static final Object LOCK1=new Object();
	public static final Object LOCK2=new Object();
	public static void main(String[] args) {
		MyDeadLock deadLock1 = new MyDeadLock(true);
		MyDeadLock deadLock2 = new MyDeadLock(false);
		deadLock1.start();
		deadLock2.start();
		
	}
}

 

package Lock2;
/**
 * 死锁代码
 * @author zhang
 *
 */
public class MyDeadLock extends Thread{
	boolean flag;//定义标记,用来指定要执行的代码

	public MyDeadLock(boolean flag) {
		this.flag = flag;
	}

	@Override
	public void run() {
		if(flag){//flag赋值为true时,执行的代码		
			synchronized(Demo01_DeadLock.LOCK1){
				System.out.println("if中锁1");
				synchronized(Demo01_DeadLock.LOCK2){
					System.out.println("if中锁2");
				}
			}
		}else{//flag赋值为flase时,执行的代码	
			synchronized(Demo01_DeadLock.LOCK2){
				System.out.println("else中锁2");
				synchronized(Demo01_DeadLock.LOCK1){
					System.out.println("else中锁1");
				}
			}
		}
	}
	
}

 

猜你喜欢

转载自1084647490.iteye.com/blog/2293787