編程第五周的日常<二>

多線程

定義:簡單的說,當程序同時完成多見事情時,就是所謂的多線程程序。(基于并發(fā)的思想)

1 進程和線程

進程 -process- 進程是操作系統(tǒng)分配內(nèi)存的基本單位
線程 -thread- 最小的執(zhí)行單元 [操作系統(tǒng)分配CPU資源的基本單位]
一個進程通常包含了一個主線程或多個線程

2 Java中創(chuàng)建線程的三種方式

(1) 繼承Thread類并重寫run()方法
(2) 實現(xiàn)Runnable接口并重寫run()方法,在這中可以使用Lambda表達式。- 推薦使用
(3) 實現(xiàn)一個Callable接口并重寫Call()方法

3 線程使用中的注意事項

(1) 啟動線程需要調(diào)用start()方法,start()方法調(diào)用被覆蓋的run()方法,如果不調(diào)用strat()方法,線程永遠都不會啟動。
(2) 三種實現(xiàn)了Runnable接口的線程的啟動方式:
<1> new Thread(實現(xiàn)了Runnable接口的對象).start;
<2> 匿名內(nèi)部類
new Thread(new Runnable(){
@Override
}).start;
<3> Lambda表達式
new Thread(() ->{
--寫方法
}).start;

4 線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系

5 Synchronized的兩種用法

<1> 放在方法前面只允許搶占到對象鎖的線程進入執(zhí)行
<2> 構(gòu)造一個同步代碼塊只允許搶占到對象鎖的線程進入執(zhí)行
<3>注意:沒有搶占到對象鎖的線程在系統(tǒng)自動維護的等待池中等待;如果搶占到鎖的線程釋放了對象鎖,那么這些等鎖的線程就會自動搶鎖;誰搶占到了鎖,誰就進入同步代碼塊中執(zhí)行,沒有搶到鎖的繼續(xù)等待;基于Synchronized的鎖機制是可重入的鎖機制。
<4> 鎖主要是為了鎖住資源,不讓多個線程同時搶占一個資源,防止出錯。

線程池

<1> 是一種多線程處理形式,處理過程中將任務添加到隊列,然后在創(chuàng)建線程后自動啟動這些任務。
<2> 裝潢模式的應用 - 將線程不安全的容器包裝成線程安全的容器。 如果可以的話,盡可能的不使用隱式鎖機制(synchronized關(guān)鍵字)或是顯式(explicit)Lock接口的鎖機制因為他們會把并行的(并發(fā))的程序變成串行執(zhí)行的程序,這樣會讓程序的性能受到嚴重的影響。 一種常見的解決方案是為每個線程創(chuàng)建資源的副本,每個資源操作自己的副本,而不是同步操作同一個副本。 這又是典型的使用空間換時間的策略。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容