[英]Execution Order of Thread in Java Main Thread
我有一個演示 Spring 引導項目,將在啟動應用程序時創建一個線程池。
在主線程中,如果有:
Task A
: 有大量的 API 調用,並會被提交到 Thread PoolTask B
:只是查詢數據庫,不會提交到Thread Pool我有以下問題:
Task B
Task A
嗎?Task B
可以等到Task A
完成后再執行嗎? 如果可以,如何實現?Task A
,會發生什么? Main Thread會不會跳過Task A
,先繼續執行Task B
呢?public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
// Task A submitting to Thread Pool
executor.submit(() ->
// process 1: fetch API
// process 2: call Database
// process 3: fetch API
// process 4: call Database
);
// Task B not submitting to Thread Pool
db.query(xxx);
}
任何任務是否返回任何內容並不重要。 當事情在並行線程中運行時,它們會並行運行,直到其中一個完成,或者您明確地等待另一個。
並行運行實際上意味着什么? 要看。 如果運行代碼的機器有多個可用的 CPU 內核,那么它實際上可以並行運行(一個內核處理一個線程),否則它可能以任何隨機方式運行。 諸如“在線程 A 中執行一個原子操作,然后在線程 B 中執行兩個,然后在線程 A 中再次執行一個”之類的選項可能是一種選擇,但這不是您可以控制的。 如果您不想確保事情以某種特定順序運行,那么要么使用Future.get()
、 Thread.join()
或 Javas 可完成的未來框架。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.