執行緒安全是多執行緒開發的根基, 我們能夠使用volatile保證變數更新的資料其他執行緒能夠看到, 但是如果兩個執行緒同時操作乙個資料, 執行緒安全無法保證.
下面的例子中, i的結果大概率小於我們預期的200000, 原因就在於t1,t2同時獲取i值, 先後寫入同乙個結果.
public class sync implements runnable@override
public void run()
} public static void main(string args) throws interruptedexception
}
為保證執行緒的安全, 我們使用synchronized關鍵字去實現執行緒的同步, 通過對同步的**(i++)加鎖來保證安全.
指定加鎖物件 : 給指定物件加鎖
直接作用於例項方法 : 相當於對當前例項加鎖
直接作用於靜態方法: 相當於對當前類加鎖
private static sync sync = new sync();public volatile static int i = 1;
public static void instance()
@override
public void run()
} }
private static sync sync = new sync();public volatile static int i = 1;
//去掉static就是, 給例項方法加鎖(執行**的2執行緒指向同乙個runnable才會有效)
public static synchronized void instance()
@override
public void run()
}
執行緒基本操作
函式原型 include int pthread create pthread t restrict thread,const pthread attr t restrict attr,void start routine void void restrict arg 建立執行緒的函式有四個引數,第...
執行緒的基本操作2
等待 wait 和通知 notify 這兩個方法來自object類,使用前必須先獲得目標的鎖.wait 使用場景必須包含在synchronzied語句中.當呼叫後,執行緒釋放鎖,進入object物件的等待佇列,等待notify notifyall 去喚醒.package threads public...
多執行緒基本操作
1 繼承thread類建立執行緒 2 實現runnable介面建立執行緒 3 使用callable和future建立執行緒 1.實現callable介面,重寫call 方法,建立該實現類的例項 2.使用futuretask類來包裝callable物件,該futuretask物件封裝了callable...