Java開發基礎 執行緒 執行緒互斥鎖 09

2021-08-20 03:19:44 字數 1558 閱讀 6948

synchronized互斥鎖簡要說明:

* 當synchronized將不同的**片段修改後,只要

* 鎖物件相同,那麼這些**是互斥的,多個執行緒不能

* 同時進到這些不同方法中

下面通過簡單例項演示:

沒有加鎖的情況:

public class syncdemo4 

};thread t2 = new thread()

};t1.start();

t2.start(); }}

class foo catch (interruptedexception e)

system.out.println(t.getname()+"執行methoda方法完畢"); }

public void methodb() catch (interruptedexception e)

system.out.println(t.getname()+"執行methodb方法完畢");

}}

執行程式控制臺輸出:可以看到執行緒1在執行b方法時 執行緒0也可以執行同一物件另一a方法。沒有達到互斥的作用。

如何實現乙個執行緒在執行同一物件的乙個方法時,另乙個執行緒就不能呼叫同一物件的另乙個方法,即互斥鎖效果

我們只要使用synchronized分別對同一物件的需要互斥的方法加鎖即可:

加鎖後**如下所示:

public class syncdemo4 

};thread t2 = new thread()

};thread t3 = new thread()

};t1.start();

t2.start();

t3.start(); }}

class foo catch (interruptedexception e)

system.out.println(t.getname()+"執行methoda方法完畢"); }

public synchronized void methodb() catch (interruptedexception e)

system.out.println(t.getname()+"執行methodb方法完畢"); }

public void methodc() catch (interruptedexception e)

system.out.println(t.getname()+"執行methodc方法完畢");

}}

再次執行程式後控制台輸出:我們發現加鎖後的a方法與b方法已經產生互斥,而沒有加鎖的c方法不受a方法與b方法加鎖的影響,

沒有互斥的效果。

總結:對想實現互斥鎖的方法,只要將對應類的成員方法加鎖即可。

不同執行緒在呼叫同一物件不同方法時才會有互斥鎖效果

執行緒 互斥鎖

include include include include include 1.靜態初始化,當動態初始化時,遮蔽靜態初始化 pthread mutex t mutex pthread mutex initializer 2.動態初始化 pthread mutex t mutex int lock...

執行緒互斥鎖

執行緒互斥鎖 降低效率,保證資料安全 執行緒 資料共享 修改共享資料,資料不安全 from threading import thread,lock import time n 100 deftask global n temp n time.sleep 0.1 n temp 1 if name m...

執行緒的互斥鎖

1.執行緒的互斥鎖 1.1.初始化 在linux下,執行緒的互斥量資料型別是pthread mutex t.在使用前,要對它進行初始化 對於靜態分配的互斥量,可以把它設定為pthread mutex initializer,或者呼叫pthread mutex init.對於動態分配的互斥量,在申請記...