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.對於動態分配的互斥量,在申請記...