Linux教程網
- package namespace;
- class Dead implements Runnable
- {
- public boolean flag;
- public Object locka=new Object();
- public Object lockb=new Object();
- public Dead(boolean f) {this.flag=f;}
- public void run()
-
- {
- while(true) {
- if(flag)
- {
- synchronized(Lock.locka)
- {
- System.out.println("if loca");
- synchronized(Lock.lockb)
- {
- System.out.println("if lockb");
- }
- }
- }
-
- else {
- synchronized(Lock.lockb)
- {
- System.out.println("else lockb");
- synchronized (Lock.locka) {
- System.out.println("else locka");
- }
- }
- }
- }
- }
- }
- class Lock
- {
- static Object locka=new Object();
- static Object lockb=new Object();
- }
- public class DeadLock {
-
- public static void main(String args[])
- {
- Thread t1=new Thread(new Dead(true));
- Thread t2=new Thread(new Dead(false));
- t1.start();
- t2.start();
- }
- }
- /*
- * 寫一個死鎖程序
- * 容易引起 是因為兩個鎖引用的不是同一個鎖,這樣就會引起死鎖現在
- *
- * 還有在多現在中出現安全性問題的時候,一般要考慮的問題:
- * 1. 是不是兩個線程,並且兩個線程有沒有同步,也就是有沒有 synchronized 塊或函數
- * 2. 如果有多個同步代碼塊或同步函數的話,那看看所有 的同步它們用的是不是��一個鎖,如果不是,會引起死鎖和安全性問題
- *
- * */ 2011/10/23 15:13:46
Copyright ©
Linux教程網 All Rights Reserved