1.synchronized的三種應用方式
<1>修飾例項方法,作用於當前例項加鎖,進入同步**前要獲得當前例項的鎖
<2>修飾靜態方法,作用於當前類物件加鎖,進入同步**前要獲得當前類物件的鎖
<3>修飾**塊,指定加鎖物件,對給定物件加鎖,進入同步**庫前要獲得給定物件的鎖。
synchronized修飾例項方法:
//容器已滿,無法繼續生產蘋果
try catch (interruptedexception e)
} this.notifyall();
//生產蘋果
index++;
} //取蘋果
while(index<=0) catch (interruptedexception e)
} this.notifyall();
//消費蘋果
index--;}
修飾**塊方法:
public void run() catch (interruptedexception e)
//同時 鎖住 lisi
synchronized (ls) }}
synchronized的一些作用域:1.synchronized修飾例項方法時,多個執行緒同時訪問該類的的例項方法,只有乙個執行緒可以獲得鎖,也就算該類所有被synchronized修飾的方法只能被同乙個執行緒訪問(獲得鎖的執行緒),其他執行緒只能訪問沒有被synchronized修飾的方法,但是如果synchronized修飾靜態方法當前類就是鎖物件,所以該類的例項方法即使被synchronized修飾也是能被其他執行緒訪問的;
2.得到物件鎖的執行緒可以訪問該物件中其他被synchronized修飾的方法;
3.子類的synchronized方法中可以呼叫父類的synchronized方法;
volatile關鍵字:
public class test02
system.out.println("end");
}public static void main(string args) catch (exception e)
t2.flag=false;}}
結果:
start
將flag變數加上volatile後
start
end
不加volatile關鍵字,cpu將執行緒中的flag讀取到自己的快取中後,即使cpu排程其他執行緒來改變了它,他也不會重新將修改了的值讀取到快取,加上volatile關鍵字後,若值改變,就會通知cpu重新讀取快取中修改後的值
wait()會釋放鎖,notify不會釋放鎖;
在這裡插入描述
多執行緒學習心得
除非一台計算機有多個cpu 如雙核 否則是不會真正的執行兩個以上的程式的。但是如果是那樣我們為什麼可以同時執行多個程式呢?這就是多執行緒的作用了,乙個程序是由多個執行緒組成的,一台計算機可以同時執行多個不同程序的執行緒,而不是乙個完整的程序。多執行緒主要有兩個優勢 1.提高介面程式的響應速度 2.充...
多執行緒學習心得
除非一台計算機有多個cpu 如雙核 否則是不會真正的執行兩個以上的程式的。但是如果是那樣我們為什麼可以同時執行多個程式呢?這就是多執行緒的作用了,乙個程序是由多個執行緒組成的,一台計算機可以同時執行多個不同程序的執行緒,而不是乙個完整的程序。多執行緒主要有兩個優勢 1.提高介面程式的響應速度 2.充...
C C 多執行緒的學習心得總結
個人覺得在學習多執行緒程式設計之前最好先了解程序和執行緒的關係,然後在學習執行緒工作方式的過程中動手寫個 我是從抄開始的 多執行緒的小程式,會對學習多執行緒有很大的幫助,否則只有理論是很抽象的.在學習多執行緒程式設計之前,必須先知道什麼是 執行緒函式,執行緒函式就是另乙個執行緒的入口函式.預設情況下...