多執行緒與高併發1 基礎定義

2021-10-04 08:02:53 字數 817 閱讀 2584

程序是作業系統能夠分配的最小單位

執行緒是作業系統能夠排程的最小單位(乙個程式的不同執行路徑)

1.thread 2.runnable 3.executors

sleep執行緒進行睡眠,讓出cpu給其他執行緒繼續執行。到規定的時間喚醒

yield將當前執行緒回到等待佇列中,返回到就緒狀態,讓出cpu

需要在同步中執行,notify並不會釋放鎖,wait才會釋放鎖

將並行執行轉為序列執行

1、對某個物件加鎖,只有拿到鎖的才能執行下一步**

2、在hotspot中,通過物件頭中64位,拿出兩位(mark word)記錄鎖的狀態。

1.jvm早期,synchronize非常重量級,後來改進鎖公升級的概念。

2.乙個執行緒時,mark word僅記錄了執行緒id,並沒有上鎖(偏向鎖)

3.如果有執行緒徵用,公升級為自旋鎖(處於使用者態,執行時間較短,執行緒數比較少,使用自旋鎖。執行時間較長,執行緒較多使用系統鎖)

4.如果在自旋10次後,仍未獲得鎖,公升級為重量級鎖,(os)

3、synchronized(this) 等價於 synchronized方法

4、靜態方法的synchronized等價於synchronize這個類

5、可重入鎖:乙個同步方法可以呼叫另外乙個同步方法,乙個執行緒已經擁有了某個物件的鎖,再次申請的時候仍會得到該物件的鎖

6、程式**現異常,預設情況鎖會被釋放,導致等待執行緒亂入,產生資料不一致問題

多執行緒與高併發

blocked 鎖池 timed waiting 定時等待 waiting 等待 terminated 禁止指令重排序 記憶體屏障 在單例雙重檢查中,不加會出現使用半初始化的值,也就是還未附初始值,指令重排導致的 類載入與指令重排的知識 public class spinlock while fla...

多執行緒與高併發 1 synchronized 篇

程序 執行緒 協程 纖程 quasur 乙個程式裡不同的執行路徑 public static class t1extends thread 方法一 newmythread start 方法二 newmythread start 方法三 newthread 建立執行緒的兩種方式 建立乙個類,繼承thr...

多執行緒與高併發 一

建立乙個執行緒的兩種方式 繼承threadclass mythread extends thread newmythread start 實現runnable介面class mythread implements runnable newthread new myrun start 面試時候有時候會...