執行緒基礎01

2021-10-08 16:07:45 字數 4020 閱讀 6210

**注意:**

執行緒thread的構造方法:

執行緒thread常用api:

執行緒同步 - 多個執行緒, 共享資源

載入和顯示兩個執行緒:

執行緒池程式

程序執行緒

重寫 run 方法

建立自定義的執行緒物件

開啟執行緒 start()

thread t =

newmythread1

("執行緒1");

t.start()

;

重寫 run 方法

建立自定義的任務物件

通過任務物件, 構造乙個執行緒物件

開啟執行緒 start()

mythread task =

newmythread()

;//mythread 是自己建立的任務物件

thread t =

newthread

(task,

"執行緒1");

t.start()

;

繼承 thread類:

thread t =

newthread()

}}; t.

start()

;

繼承runnable介面:

runnable run =

newrunnable()

}}; thread t1 =

newthread

(run)

; t1.

start()

;

1.不是哪個執行緒先start, 就先執行哪個執行緒,執行緒的執行順序, 是不固定的.

1.new 自定義執行緒類(): 自定義類的構造方法, 隨意

2.new thread(): 無參構造器

3.new thread(string): string->指定的執行緒名

thread t =

newthread

("執行緒1"

);

4.new thread(runnable): runnable->執行緒任務

thread t =

newthread

(task)

;

5.new thread(runnable, string): runnable->執行緒任務, string->指定的執行緒名

thread t =

newthread

(task,

"執行緒1"

);

獲得當前正在執行的執行緒物件

獲得執行緒物件的名字, 執行緒在建立時可以指定名字, 也可以預設分配名字

返回此執行緒的優先順序

void setpriority(int): 設定執行緒的優先順序

測試這個執行緒是否是守護執行緒

void setdaemon(boolean): 設定這個執行緒是守護執行緒

執行緒休眠指定時間

會有乙個已檢查異常, 所以必須要 try-catch

等待呼叫這個方法的執行緒結束, 再繼續後續**

會有乙個已檢查異常, 所以必須要 try-catch

主動放棄cpu的時間片

優先順序: 1~10

改變cpu分配時間片的概率

守護執行緒 - 前台執行緒

當所有的前台執行緒結束, 守護執行緒也會自動結束

gc 就是守護執行緒

當執行緒執行完這個方法, 才會將鎖釋放

加到方法上, 同步方法鎖

加到**上, 借助物件, 通常是this,

確保同步的執行緒, 物件共享即可

實現類: reentrantlock lock = new reentrantlock();

加鎖: 鎖物件.lock();

解鎖: 鎖物件.unlock();

1.執行緒1 負責的載入任務. 1%~100% -> 載入完成

2.執行緒2 負責的顯示任務. 要求載入完才能顯示

執行緒1 和 執行緒2 是同時開啟的 start()

執行緒通訊: 兩個執行緒有共享資料, 執行緒之間有動作互動

wait(): 等待

notify(): 喚醒

public

class

demo

}

public

class

loadpicture

extends

thread

public

void

run(

) system.out.

println

("載入完成");

// 設定狀態為已載入完成

picture.isload =

true

;synchronized

(picture)

// 等待顯示完成if(

!picture.isshow)

catch

(interruptedexception e)}}

// 假設已經限時完成

system.out.

println()

;for

(int i =

0; i <

100; i++

) system.out.

println()

;}}

public

class

picture

public

class

showpicture

extends

thread

public

void

run(

)catch

(interruptedexception e)}}

// 假設已經載入完成

system.out.

println

("顯示!");

trycatch

(interruptedexception e)

system.out.

println

("顯示完成!");

// 改變顯示狀態

picture.isshow =

true

;synchronized

(picture)

}}

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

建立執行緒池物件。

建立runnable接⼝⼦類物件。(task)

提交runnable接⼝⼦類物件。(take task)

關閉執行緒池(⼀般不做)

// 建立執行緒池物件

executorservice service = executors.

newfixedthreadpool(2

);// 包含2個線

程物件

// 建立runnable例項物件

myrunnable r =

newmyrunnable()

;

// 從執行緒池中獲取執行緒物件,然後調⽤myrunnable中的run()

service.

submit

(r);

// 再獲取個執行緒物件,調⽤myrunnable中的run()

service.

submit

(r);

service.

submit

(r);

// 注意:submit⽅法調⽤結束後,程式並不終⽌,是因為執行緒池控制了執行緒的關閉。

// 將使⽤完的執行緒⼜歸還到了執行緒池中

// 關閉執行緒池

service.

shutdown()

;

01多執行緒基礎

1 多執行緒 為了提高程式執行效率 什麼是執行緒 執行緒就是一條程式執行路徑或者執行流程 什麼是程序 執行中的程式,每個程序都有一條主線程,在實際執行中,程序也可以理解為多個執行緒的集合。2 多執行緒應用場景 3 建立執行緒有哪些方式 1 使用繼承tread類方式,重寫run方法 2 使用實現run...

多執行緒 01 基礎

乙個程序可以有多個執行緒,如你開啟qq是乙個程序,但是聊天 開語音可能是乙個乙個的執行緒。thread類實現了runnable介面。繼承thread,實現了runnable介面。呼叫 runnabel是個介面,要通過實現類來進行呼叫。start方法是啟動乙個執行緒,run方法是呼叫乙個方法。slee...

執行緒池01 執行緒池基礎知識

執行緒池的執行邏輯如下 核心引數 public threadpoolexecutor int corepoolsize,int maximumpoolsize,long keepalivetime,timeunit unit,blockingqueueworkqueue,threadfactory ...