簡體   English   中英

Java主線程中線程的執行順序

[英]Execution Order of Thread in Java Main Thread

我有一個演示 Spring 引導項目,將在啟動應用程序時創建一個線程池。

在主線程中,如果有:

  1. Task A : 有大量的 API 調用,並會被提交到 Thread Pool
  2. Task B :只是查詢數據庫,不會提交到Thread Pool

我有以下問題:

  1. 如果遵循以下代碼方法, Task B Task A嗎?
  2. Task B可以等到Task A完成后再執行嗎? 如果可以,如何實現?
  3. 假設如果沒有空閑的工作線程來處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM