1. 程式人生 > >java多執行緒設計模式

java多執行緒設計模式

1 I/O處理比較花費時間,故把執行I/O處理和非IO處理的執行緒分開。CPU執行速度很快、而記憶體的寫入、讀取很慢,所以有關CPU和記憶體互動會降低指令的速度。
2 start方法執行有2個步驟
啟動新的執行緒
執行new物件的run方法
3 所有執行緒結束,程式結束。  主執行緒可以先結束,但並不表示程式結束。
4 一個執行緒已經獲得鎖定,其他執行緒都不能執行該例項的synchronized方法。
5 wait set 執行緒休息區,當執行緒呼叫wait()方法時,執行緒自動進入wait set 區等待,直到被喚醒。
6 wait notify notifyAll方法都是在鎖定時呼叫,喚醒的執行緒重新等待鎖。並且都有物件obj.wait(),否則預設this.wait()
7 執行緒好壞評判標準
   安全性和生存性為必考慮
安全性    ---不損壞物件
生存性    ---進行必要處理 , 防止執行緒掛掉
複用性    ---可在利用類
效能      ---能快速、大量的進行處理
吞吐量越大、響應性越快、容量越大,效能越好
8 可能發生死鎖的3個條件
a、具有多個sharedResourse參與者,即共享資源
b、執行緒鎖定一個sharedSourse時,還沒解除前就去鎖定另一個sharedSourse.
c、獲取sharedSourse的順序不固定
只要破壞a b c中的任意一個條件,就可以避免死鎖的發生。
9 臨界區的大小與執行效能
獲取鎖定需要花時間
執行緒衝突時必須等待
10 有鎖定時一定要記得解鎖,中間不能有return 或是異常。
11 要線上程中共享long 和 double 的欄位,必須在synchronized中操作,或是宣告成volatile
12 Immutable Thread(不可變執行緒)
欄位為 final私有
沒有setter方法
  優點:不需要synchronized欄位,頻繁訪問的情況下可以大大提高效能。
13 被阻擋而等待
等待
while(!ready){
wait();
}


喚醒
ready=true;
notify()/notifyAll()
14 ReadWriteLock
Read  Read    不衝突
Read  Write   衝突
Write  Write   衝突
15 程序與執行緒的區別
a 程序的記憶體是獨立的、執行緒的記憶體是共享的

16 interrupt() 方法會喚醒sleep/wait/join ,但會直接到catch語句,而不是執行其後面的語句。
17 join()等待執行緒結束










疑問:
1 同一個類中,2個方法用了synchronized, 呼叫其中的一個方法,另一個方法也被鎖住了?
答:是










1、多核、多CPU執行緒
Lock
lock.lockInterruptibly(),其實和lock.lock()效果一樣,只有當呼叫interrupt()方法時,前面的會先執行catch裡程式碼。
Condition 
Timer
TimerTask
Callable<V>
2 WeakReference弱引用,防止記憶體洩露,將弱引用物件佔用空間釋放。
3  Futrue<V>  FutrueTask<V>
4 JAVA netive關鍵字
native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。
Java語言本身不能對作業系統底層進行訪問和操作,但是可以通過JNI介面呼叫其他語言來實現對底層的訪問。
5 public ThreadPoolExecutor(int corePoolSize,  
                              int maximumPoolSize,  
                              long keepAliveTime,  
                              TimeUnit unit,  
                              BlockingQueue<Runnable> workQueue,  
                              ThreadFactory threadFactory,  
                              RejectedExecutionHandler handler)
a.當執行緒池小於corePoolSize時,新提交任務將建立一個新執行緒執行任務,即使此時執行緒池中存在空閒執行緒。 
b.當執行緒池達到corePoolSize時,新提交任務將被放入workQueue中,等待執行緒池中任務排程執行 
c.當workQueue已滿,且maximumPoolSize>corePoolSize時,新提交任務會建立新執行緒執行任務 
d.當提交任務數超過maximumPoolSize時,新提交任務由RejectedExecutionHandler處理 
e.當執行緒池中超過corePoolSize執行緒,空閒時間達到keepAliveTime時,關閉空閒執行緒 
f.當設定allowCoreThreadTimeOut(true)時,執行緒池中corePoolSize執行緒空閒時間達到keepAliveTime也將關閉 
  





相關推薦

Java 執行設計模式之基礎概念

順序、併發與並行 順序 用於表示多個操作“依次處理”。比如把十個操作交給一個人來處理時,這個人要一個一個地按順序來處理 並行 用於標識多個操作“同時處理”。比如十個操作分給兩個人處理時,這兩個人就會並行來處理。 併發 相對於順序和並行來說比較抽象,用於表示“將一個

圖解java執行設計模式

序章1 Java執行緒 何謂執行緒 文中給出的解釋是:正在執行程式的主體 執行緒的啟動 新執行緒的啟動一定是呼叫start()方法,該方法主要是執行兩步操作 啟動新執行緒 呼叫新執行緒的run()方法 這裡需要注意: public class Test(

圖解java執行設計模式-第二章 Immutable模式

以下內容是我在閱讀《圖解Java多執行緒設計模式》一書中的總結和思考 本章配圖文字是:想破壞也破壞不了。 定義 例項物件的內部狀態不會發生變化,也就是說不提供對外改變屬性的方法(除了建立物件時初始化的方法外),那麼這個類就是Immutable的,無需任何互斥操作都可

Java執行設計模式執行模式

前序:   Thread-Per-Message Pattern,是一種對於每個命令或請求,都分配一個執行緒,由這個執行緒執行工作。它將“委託訊息的一端”和“執行訊息的一端”用兩個不同的執行緒來實現。該執行緒模式主要包括三個部分:   1,Request參

java執行設計模式

1 I/O處理比較花費時間,故把執行I/O處理和非IO處理的執行緒分開。CPU執行速度很快、而記憶體的寫入、讀取很慢,所以有關CPU和記憶體互動會降低指令的速度。 2 start方法執行有2個步驟啟動新的執行緒執行new物件的run方法 3 所有執行緒結束,程式結束。  主

java執行設計模式之Guarded Suspension

想象一個場景,你在排隊領軍訓的裝備,當你排隊到視窗的時候,工作人員對你說,等一下,讓我叫後勤先去倉庫取下裝備再給你,於是你等到工作人員取回裝備才能領走裝備。 抽象為一個java程式模型:你是一個執行緒

圖解java執行設計模式學習第五章Producer-Consumer模式

生產者消費者模式,生產者安全地將資料交給消費者。雖然僅是這樣看似簡單的操作,但當生產者和消費者以不同的執行緒執行時,兩者之間的處理速度差異便會引起問題。例如,消費者想要獲取資料,可資料還沒有生成,或者生產者想要交付資料,而消費者的狀態還無法接收資料等。一般來說,在該模式中,生

圖解java執行設計模式學習第六章Read-Write Lock模式

學生們正在一起看老師在黑板上寫的板書。這時,老師想插掉板書,再寫新的內容。而學生們說道:“”老師,我們還沒看完了,請先不要摖掉“”。於是,老師會等待大家都看完。當執行緒“”讀取“”例項的狀態時,例項的狀態不會發生變化。例項的狀態僅線上程執行“”寫入“”操作時才會發生變化。從例

圖解Java執行設計模式 序章1 Java執行

【Thread類的run方法和start方法】     JAVA程式執行時,最開始執行的只能是主執行緒。所以必須在程式中啟動新執行緒。     啟動執行緒時,要使用如下類(一般稱為Thread類) public class MyThread extends Thread

Java 執行設計模式之Guarded Suspension

Guarded Suspension 模式核心是一個受保護的方法(Guarded Method)。該方法執行其所要真正執行的操作時需要滿足特定的條件(Predicate, 保護條件)。類似與 wait/notify, 當條件不滿足時,執行受保護的執行緒會被掛起進

Java 執行設計模式Master-Slave

為了避免Slave 執行緒佔用過多的資源,我們主要採取了兩個措施。一個是,Master 類所建立的Slave 執行緒數量為JVM 所在主機的CPU 個數(通過Runtime.getRuntime().availableProcessor()獲取); 另一個是Sl

java執行設計模式 -- 流水線模式(Pipeline)

十一、流水線模式(Pipeline) 1、核心思想 將一個任務處理分解為若干個處理階段,其中每個處理階段的輸出作為下一個處理階段的輸入,並且各個處理階段都有相應的工作者執行緒去執行相應的計算。 2、評價: 充分利用CPU,提高其計算效率。

Java執行設計模式(6)兩階段終止模式

一  Thread-Specific Storage Pattern   Thread-Specific Storage Pattern指的就是執行緒獨有的儲藏庫,針對每個執行緒提供記憶體空間的意義。這種模式只有一個入口,但是內部會對每個執行緒提供特有的儲存空間。   Thread-Spe

執行設計模式:第六篇 - ThreadLocal和Active Object模式

一,ThreadLocal         Java 中的 ThreadLocal 類給多執行緒程式設計提供了一種可以讓每個執行緒具有自己獨立空間的機制,在這個空間記憶體儲的資料是執行緒特有的,不對外共享。  &nb

執行設計模式:第四篇 - Thread-Per-Message模式和Worker-Thread模式

一,Thread-Per-Message模式         Thread-Per-Message模式是說為每個請求都分配一個執行緒,由這個執行緒來執行處理。這裡包含兩個角色,請求的提交執行緒和請求的執行執行緒。  

執行設計模式:第三篇 - 生產者-消費者模式和讀寫鎖模式

一,生產者-消費者模式         生產者-消費者模式是比較常見的一種模式,當生產者和消費者都只有一個的時候,這種模式也被稱為 Pipe模式,即管道模式。      &nb

14.執行設計模式 - Master-Worker模式

多執行緒設計模式 - Master-Worker模式  併發設計模式屬於設計優化的一部分,它對於一些常用的多執行緒結構的總結和抽象。與序列相比並行程式結構通常較為複雜,因此合理的使用並行模式在多執行緒併發中更具有意義。 1. Master-Worker模式 - Master-Worker

13.執行設計模式 - Future模式

多執行緒設計模式 - Future模式 併發設計模式屬於設計優化的一部分,它對於一些常用的多執行緒結構的總結和抽象。與序列相比並行程式結構通常較為複雜,因此合理的使用並行模式在多執行緒併發中更具有意義。 1. Future   Future模式是多執行緒開發中非常常見的一種設計模式,它的

JAVA 執行Future模式

Future模式有點類似於商品訂單。比如在網購時,當看重某一件商品時,就可以提交訂單,當訂單處理完成後,在家裡等待商品送貨上門即可。或者說更形象的我們傳送Ajax請求的時候,頁面是非同步的進行後臺處理,使用者無須一直等待請求的結果,可以繼續瀏覽或操作其他內容。   Futur

執行設計模式:Master-Worker模式

Master-Worker是常用的平行計算模式。它的核心思想是系統由兩類程序協作工作:Master程序和Worker程序。Master負責接收和分配任務,Worker負責處理子任務。當各個Worker子程序處理完成後,會將結果返回給Master,由Master作歸納總結。其好處就是能將一個大任務分解