主線程結束子執行緒也不執行了,很奇怪,按理不應該這樣

2021-08-27 17:46:12 字數 1095 閱讀 1412

[quote]最近在測試使用多執行緒從資料庫中讀資料,所有子執行緒結束後,再講彙總的資料儲存到檔案中。發現了乙個問題,總是會出現這樣一種情況:主線程結束後,子執行緒中的**還沒有執行結束就不再執行了,只執行了其中的一部分。

找了各種資料,都在說主線程結束後,如果子執行緒不是守護執行緒,子執行緒將不會受到影響,繼續執行。我這裡的執行緒明明不是守護執行緒,所以還是很奇怪。

最終終於找出原因了,原來是因為junit單元測試的原因,如果把這段**放到main方法中執行,每次都是好的。

我還學到了cyclicbarrier這個類的使用方法和場景,這個類在多執行緒時還是非常有用的。比如:

起10個執行緒分別取從資料庫中以分頁的方式去查資料,當10個執行緒都執行結束後,將總的查詢資料寫入的資料庫中。這個時候如何保證所有執行緒都執行結束的這個時間點,就可以使用cyclicbarrier。

cyclicbarrier:同步輔助類。一組執行緒相互等待,全部執行結束後,會喚醒cyclicbarrier指定的同步執行緒,執行最終的統計工作。

[/quote]

public class countthread extends thread

private int count;

private cyclicbarrier cyclicbarrier;

public void run() catch (interruptedexception e1)

system.out.println(count);

try catch (interruptedexception e) catch (brokenbarrierexception e) }}

public class sumtaskthread implements runnable

}

public static void main(string args)

public static void test1()

system.out.println("主線程執行結束");

}

C 主線程等待子執行緒執行結束

佐左佑右 原文 c 主線程等待子執行緒執行結束 由於主程式中呼叫matlab的dll檔案進行計算要用較長的時間,主介面會有很長時間的卡頓,造成的使用者感受十分不好,因此我想在呼叫時,將呼叫放入子執行緒中,然後在主線程中彈出乙個提示框,顯示資料正在載入,等子執行緒執行結束後,主線程繼續工作。使用的是中...

主線程會等待子執行緒執行結束再結束

一 執行緒的特點 主程序會等待所有子程序執行結束後再結束。1 將子執行緒設定守護主線程 子執行緒物件 threading.thread target 任務,daemon true 子執行緒物件.setdaemon true 二 示例 要求 主線程睡一秒後退出程式 1 不設定守護主線程則報錯,因為任務...

python主線程與子執行緒的結束順序

對於程式來說,如果主程序在子程序還未結束時就已經退出,那麼linux核心會將子程序的父程序id改為1 也就是init程序 當子程序結束後會由init程序來 該子程序。主線程退出後子執行緒的狀態依賴於它所在的程序,如果程序沒有退出的話子執行緒依然正常運轉。如果程序退出了,那麼它所有的執行緒都會退出,所...