多執行緒,,,,,執行緒池

2022-07-29 02:18:13 字數 3444 閱讀 3509

建立新執行執行緒有兩種方法。

l  一種方法是將類宣告為 thread 的子類。該子類應重寫 thread 類的 run 方法。建立物件,開啟執行緒。run方法相當於其他執行緒的main方法。

l  另一種方法是宣告乙個實現 runnable 介面的類。該類然後實現 run 方法。然後建立runnable的子類物件,傳入到某個執行緒的構造方法中,開啟執行緒。

繼承thread,重寫run方法

public

class

mythread extends thread

}}

測試

public

class demo02

}}

兩個迴圈同時進行,交叉列印,因為調start方法時會開乙個新棧,兩個棧交替執行

l  thread.currentthread()獲取當前執行緒物件

l  thread.currentthread().getname();獲取當前執行緒物件的名稱

public

class demo02

}}

public

class

mythread extends thread

}}

runnable介面用來指定每個執行緒要執行的任務。包含了乙個 run 的無引數抽象方法,需要由介面實現類重寫該方法。

l  thread類構造方法

建立執行緒的步驟。

1、定義類實現runnable介面。

2、覆蓋介面中的run方法。。

3、建立thread類的物件

4、將runnable介面的子類物件作為引數傳遞給thread類的建構函式。

5、呼叫thread類的start方法開啟執行緒。

public

class

demo01

}}

public

class

myrunnable implements runnable }}

實現runnable介面,避免了繼承thread類的單繼承侷限性。覆蓋runnable介面中的run方法,將執行緒任務**定義到run方法中。

建立thread類的物件,只有建立thread類的物件才可以建立執行緒。執行緒任務已被封裝到runnable介面的run方法中,而這個run方法所屬於runnable介面的子類物件,所以將這個子類物件作為引數傳遞給thread的建構函式,這樣,執行緒物件建立時就可以明確要執行的執行緒的任務。

現runnable介面避免了單繼承的侷限性,所以較為常用。實現runnable介面的方式,更加的符合物件導向,執行緒分為兩部分,一部分執行緒物件,一部分執行緒任務。

匿名內部類格式:new父類或介面()

使用執行緒的內匿名內部類方式,可以方便的實現每個執行緒執行不同的執行緒任務操作。

public

class

demo02

thread t=new thread()}};

t.start();

//實現runable介面

//建立執行緒任務物件

runnable my=new

runnable()

};};

//建立執行緒物件,交替執行

newthread(my).start();}}

執行緒池,其實就是乙個容納多個執行緒的容器,其中的執行緒可以反覆使用,省去了頻繁建立執行緒物件的操作,無需反覆建立執行緒而消耗過多資源。

l  executors:執行緒池建立工廠類

public static executorservice newfixedthreadpool(int nthreads):返回執行緒池物件

l  executorservice:執行緒池類

future>submit(runnable task):獲取執行緒池中的某乙個執行緒物件,並執行

l  future介面:用來記錄執行緒任務執行完畢後產生的結果。執行緒池建立與使用

l  使用執行緒池中線程物件的步驟:

建立執行緒池物件

建立runnable介面子類物件

提交runnable介面子類物件

關閉執行緒池

public

class

demo03

}

l  runnable介面實現類

public

class

myrunnable implements runnable }}

l  callable介面:與runnable介面功能相似,用來指定執行緒的任務。其中的call()方法,用來返回執行緒任務執行完畢後的結果,call方法可丟擲異常。

l  executorservice:執行緒池類

futuresubmit(callabletask):獲取執行緒池中的某乙個執行緒物件,並執行執行緒中的call()方法

l  future介面:用來記錄執行緒任務執行完畢後產生的結果。執行緒池建立與使用

l  使用執行緒池中線程物件的步驟:

建立執行緒池物件

建立callable介面子類物件

提交callable介面子類物件

關閉執行緒池

public

class

demo04

}

l  callable介面實現類,call方法可丟擲異常、返回執行緒任務執行完畢後的結果

public

class mycallable implements callable

}

用兩條執行緒分別計算1-50的和 和1-100的和,將結果返回

public

class

demo01

}

public

class call implements callable

public

integer call() throws exception

return

sum;}}

多執行緒 執行緒池

第一 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。第二 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。第三 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配 調優和監控...

多執行緒 執行緒池

執行緒池是什麼 執行緒池 thread pool 是一種基於池化思想管理執行緒的工具,經常出現在多執行緒伺服器中,如mysql。執行緒過多會帶來額外的開銷,其中包括建立銷毀執行緒的開銷 排程執行緒的開銷等等,同時也降低了計算機的整體效能。執行緒池維護多個執行緒,等待監督管理者分配可併發執行的任務。這...

多執行緒 執行緒池

執行緒池的作用 減少了每次建立 銷毀執行緒所帶來的損耗。執行緒池建立執行緒的簡易流程 文字描述 1 先判斷核心執行緒池 corepoolsize 是否已滿,沒滿就建立核心執行緒執行,滿了就進行下一判斷。2 判斷等待佇列 workqueue 是否已經滿了,沒滿就新增到等待佇列,滿了就進行下一判斷。3 ...