使用多執行緒,最重要的就是安全問題,何為安全問題?
public class threadtest1 }
class myrunnable implements runnable catch (interruptedexception e)
system.out.println(i--);
}} }
}
執行結果:
....87
6543
210-1
-2
可以看出,執行結果出了問題,出現了0,-1,-2等非法資料,這是因為:
這就是使用多執行緒產生的安全問題。
產生的原因是:
多執行緒操作共享資料。
解決方法:對操作共享資料的**片段進行同步。使用關鍵字synchronized.
第一:同步**塊
語法:synchronized(物件) catch (interruptedexception e)
system.out.println(i--);}}
} }}
這樣就不會出問題了。
第二種:同步方法
語法: public synchronized void add().。用synchronized關鍵字對方法進行修飾,那麼此方法就成為了同步方法。
class myrunnable implements runnable }
public synchronized void cutdown() catch (interruptedexception e)
system.out.println(i--);
} }}
值得注意的是,我們說了,synchronzied需要乙個物件鎖,而對方法上鎖並沒有看到這個鎖在**,其實對方法上鎖預設為this鎖。
第三種:對靜態方法上鎖
public static synchronized void cutdown() catch (interruptedexception e)
system.out.println(i--);
} }
靜態方法的鎖,是他所在類的class物件,比如說上述例項,他的鎖就是myrunnable.class物件,如果有靜態**塊需要和他同步,那麼synchronized(類.class){}來同步,否則不起作用。 java再複習 執行緒的死鎖問題
使用多執行緒的時候,除了因為操作共享資料帶來的安全問題,還有乙個就是因為,為了避免安全問題去使用同步,但是因為同步使用不當而產生的死鎖問題。例子 public class deadlockdemo class runnablea implements runnable public void run...
Java學習筆記 執行緒安全問題
1 多執行緒的實現 1 繼承thread類 主函式中通過建立多個subthread類物件,並呼叫其start 方法。subthread類物件中屬性資料獨佔。2 實現runnable介面 主函式中建立乙個runnable介面實現類物件,同時建立多個thread類物件,並傳入介面物件,通過各thread...
Java併發程式設計 執行緒安全問題
1.執行緒安全的概念 當多個執行緒訪問某乙個類 物件或方法 時,這個類始終都能表現出正確的行為,那麼這個類 物件或方法 就是執行緒安全的.synchronized 可以在任意物件或方法上加鎖,而加鎖的這段 稱為 互斥區 或 臨界區 示例 package com.thread.safety 執行緒安全...