對Java執行緒池的理解

2021-07-12 01:06:38 字數 1921 閱讀 1822

1. runnable

是執行緒嗎?

runnable不是執行緒,

thread

才是。比如單一執行緒池

executor

會在內部建立乙個

thread

,這個thread

會從乙個任務佇列中取出使用者提交的任務並執行,如果在執行的過程中出現異常,

executor

會自動啟動新執行緒繼續執行

2. thread的優缺點?

優點:通過new thread()

建立執行緒

api簡單易於使用,結構清晰,對於執行單一的一次性任務十分便利。

缺點:1.

每次new thread

新建物件效能差

2. 沒有執行緒管理者,可能會無限制新建執行緒,互相之間競爭,極有可能占用過多的系統資源導致

oom

3. 缺乏更多功能,比如定時、定期、併發數控制等功能

3. thread和

executor

的區別?

(為什麼刀要分為很多種,

比如菜刀、砍刀、殺豬刀?答案是功能不同,需要針對性處理)。

兩者最大的區別應該是executor

更像是乙個管理者和

thread

的集合,而

thread

只是乙個任務的執行者,thread處理的事物目的明確、邏輯簡單。

4. 執行緒池的優點?

1. 快取執行緒,進行池化,可實現對執行緒的重複利用,避免重複建立和銷毀執行緒所帶來的效能開銷。

2. 當任務在執行的過程中如出現異常,會重新建立執行緒繼續完成任務。

3. 任務按照指定的規則執行,執行緒池通過佇列的形式來接收任務,通過空閒執行緒來逐一取出任務排程。

4. 可定製拒絕策略,即任務佇列已滿時,後來的任務可拒絕處理。

5.  executor執行緒池的使用

public class testexecutor

/*** 可快取執行緒池,如果執行緒池長度超過處理需要,可靈活**空閒執行緒,若無可**,則新建執行緒.

*/static void testcachedthreadpool()

});}

}/**

* 定長線程池,可控制線程最大併發數,超出的執行緒會在佇列中等待

*/static void testfixedthreadpool()

catch (interruptedexception e)

}});}}

/*** 乙個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(fifo, lifo, 優先順序)執行

*/static void testsinglethreadexecutor()

catch (interruptedexception e)

}});}}

/*** 定長線程池,支援定時及週期性任務執行

*/static void testscheduledthreadpool()

}, 3, timeunit.seconds);

//延遲3秒鐘,以固定頻率5s定時執行

ses.scheduleatfixedrate(new runnable()

}, 3, 5, timeunit.seconds);

}/**

* 單執行緒化的執行緒池,支援定時及週期性任務執行

*/static void testsinglethreadscheduledexecutor()

}, 3, timeunit.seconds);

//延遲3秒鐘,以固定頻率5s定時執行

ses.scheduleatfixedrate(new runnable()

}, 3, 5, timeunit.seconds);

}}

Java執行緒池幾個引數的理解

執行緒池幾個引數的理解 比如去火車站買票,有10個售票視窗,但只有5個視窗對外開放.那麼對外開放的5個視窗稱為核心執行緒數,而最大執行緒數是10個視窗.如果5個視窗都被占用,那麼後來的人就必須在後面排隊,但後來售票廳人越來越多,已經人滿為患,就類似於執行緒佇列已滿.這時候火車站站長下令,把剩下的5個...

對Executor的執行緒池框架的理解

對executor的執行緒池框架的理解 1 使用執行緒池的好處 減少執行緒建立 銷毀的開銷 穩定2 executor框架 架構 executor 執行器介面,該介面定義執行runnable任務的方式。executorservice 該介面定義提供對executor的服務。scheduledexecu...

執行緒池的理解

原來一直對執行緒池心存疑惑.第乙個疑惑是.執行緒類在例項化的時候就已經指定了run函式了,也就是說,乙個執行緒在例項化的時候,他能做什麼就已經定下來了,要做別的事,就要新開乙個執行緒.這感覺就和執行緒池的思想違背了,怎麼樣從執行緒池裡面拿乙個執行緒出來就可以執行呢?執行完了然後再放回去呢?第二個疑惑...