面試題 執行緒的幾種建立方法

2022-04-02 00:24:04 字數 1366 閱讀 1255

建立執行緒的四種方式:

繼承thread類,並複寫run方法,建立該類物件,呼叫start方法開啟執行緒。此方式沒有返回值。

// 建立執行緒物件

thread t = new thread()

};// 啟動執行緒

t.start()

實現runnable介面,複寫run方法,建立thread類物件,將runnable子類物件傳遞給thread類物件。呼叫start方法開啟執行緒。此方法2較之方法1好,將執行緒物件和執行緒任務物件分離開。降低了耦合性,利於維護。此方式沒有返回值。

runnable runnable = new runnable() 

};// 建立執行緒物件

thread t = new thread( runnable );

// 啟動執行緒

t.start();

建立futuretask物件,建立callable子類物件,複寫call(相當於run)方法,將其傳遞給futuretask物件(相當於乙個runnable)。 建立thread類物件,將futuretask物件傳遞給thread物件。呼叫start方法開啟執行緒。這種方式可以獲得執行緒執行完之後的返回值。該方法使用runnable功能更加強大的乙個子類.這個子類是具有返回值型別的任務方法。

// 建立任務物件

futuretasktask3 = new futuretask<>(() -> );

// 引數1 是任務物件; 引數2 是執行緒名字,推薦

new thread(task3, "t3").start();

// 主線程阻塞,同步等待 task 執行完畢的結果

integer result = task3.get();

log.debug("結果是:{}", result);

執行緒池常見的幾種狀態

【初始狀態】僅是在語言層面建立了執行緒物件,還未與作業系統執行緒關聯

【可執行狀態】(就緒狀態)指該執行緒已經被建立(與作業系統執行緒關聯),可以由 cpu 排程執行

【執行狀態】指獲取了 cpu 時間片執行中的狀態

當 cpu 時間片用完,會從【執行狀態】轉換至【可執行狀態】,會導致執行緒的上下文切換

【阻塞狀態】

如果呼叫了阻塞 api,如 bio 讀寫檔案,這時該執行緒實際不會用到 cpu,會導致執行緒上下文切換,進入【阻塞狀態】

等 bio 操作完畢,會由作業系統喚醒阻塞的執行緒,轉換至【可執行狀態】

與【可執行狀態】的區別是,對【阻塞狀態】的執行緒來說只要它們一直不喚醒,排程器就一直不會考慮排程它們

【終止狀態】表示執行緒已經執行完畢,生命週期已經結束,不會再轉換為其它狀態

執行緒sleep方法的面試題

執行緒sleep方法的面試題 thread類原始碼展示sleep方法 問題 下面 中的t.sleep 3000 會讓自定義的t執行緒睡眠3秒鐘嗎?如果不會,那麼是讓主線程睡眠3秒嗎?為什莫呢?class mythread extends thread public class sleeptest c...

面試題 執行緒

今天公司新來的小夥伴問了我這樣乙個面試題 他不清楚為什麼最後輸出的是thread中的方法,而不是runnable中的方法,然後我看了下他從網上搜出的別人寫的答案,很多東西對於懂的人來說很容易就能看懂,但是對於剛剛踏入這一行業的人來說,他不明白。所以希望很多在這塊迷茫的小夥伴能夠更好的掌握這一點,那麼...

多執行緒面試題

題目 主線程執行10次,子執行緒執行10次,此過程重複50次 package com.thread.test function 主線程執行10次,子執行緒執行10次,此過程重複50次 public class threadproblem start for int j 0 j 50 j class ...