java再複習 執行緒的安全問題以及同步

2021-07-27 21:55:28 字數 1280 閱讀 3125

使用多執行緒,最重要的就是安全問題,何為安全問題?

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 執行緒安全...