java 多線程死鎖案例

package test;

/**
 * 內容:創建兩個靜態對象和兩個線程,第一個線程給第一個對象加鎖,第二個線程給第二個對象加鎖,當第一個線程要獲取第二個對象的鎖時
 * 發現第二個對象的鑰匙正在被第二個線程持有,所以第一個線程要的等待第二個線程釋放該鎖,而第二個線程要釋放該鎖就有執行該synchronize塊,
 * 所以要去拿第一個對象的鎖,而第一個對象的鎖,正在被第一個線程佔有,於是兩個線程互相等待,形成死鎖。
 * @author Administrator
 *
 */
public class DeadLock {
	private static Object lock1=new Object();
	private static Object lock2=new Object();
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Thread(){
			public void run(){
				synchronized (lock1) {
					System.out.println("thread1 get lock1;");
					try{
						Thread.sleep(100);
					}catch (Exception e) {
						// TODO: handle exception
					}
					synchronized (lock2) {
						System.out.println("thread1 get lock2;");
					}
				}
				System.out.println("thread1 end...");
			}
		}.start();
		
		new Thread(){
			public void run(){
				synchronized (lock2) {
					System.out.println("thread2 get lock2;");
					try{
						Thread.sleep(100);
					}catch (Exception e) {
						// TODO: handle exception
					}
					synchronized (lock1) {
						System.out.println("thread2 get lock1;");
					}
					
				}
				System.out.println("thread2 end");
			}
		}.start();
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章