簡體   English   中英

指示一個線程在被另一個線程觸發時執行代碼

[英]instructing one thread to execute code when triggered by another thread

在我的程序中,我正在使用ExecutorService調用線程,該線程將運行代碼塊,該代碼塊將在應用程序的后台運行,並向gui發送事件以對其進行更新。 當結束時遇到一個條件,告訴gui重置按鈕和計數,線程將結束。

我通過以下方式啟動線程:

ExecutorService executor = Executors.newFixedThreadPool(1);
executor.execute(new RunOnTimer(this));
// RunOnTimer starts a thread with that instance of the class

然后線程將運行,直到滿足條件為止:

//if this
fireNoMoreFilesEvent();

告訴gui重置,然后再執行者:

executor.shutdown();
executor.awaitTermination(100,TimeUnit.MILLISECONDS);

當我調試時,正在運行的線程被殺死,剩下的只是主線程。 現在的問題是,當我嘗試在程序的相同實例中再次運行相同的執行時,線程啟動,然后突然退出而沒有執行任何代碼。 然后在發生這種情況之后,我再次選擇相同的代碼來執行,並且效果很好。

如果我嘗試在調試中觀察到此行為,則代碼將運行良好,並且新線程不會不執行任何操作而直接退出,因此我猜測是當新線程將事件發送到時,新線程在主線程之間發生了某些情況桂。

是否有某種使主線程執行代碼的方法,否則該代碼將由新線程執行? 我想要的是讓新線程執行其運行塊並為gui發送事件。 如果可能,這樣做有哪些方法?

如果您在執行程序中反復運行任務,那么我的建議是在程序開始時創建一次執行程序,然后對每個任務使用相同的執行程序。 創建多個執行程序沒有任何價值。 每個人可以執行多個任務。 構造任務時,請傳遞一個可以用來表示任務完成的對象。 考慮Future,CompletableFuture或BlockingQueue。 另外,您可能需要CompletionService而不是ExecutorService。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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