日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 线程 函数_java – 从后台线程调用主线程上的函数

發布時間:2024/9/27 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 线程 函数_java – 从后台线程调用主线程上的函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更新

我已經更新了這個問題,使用建議的SwingWorker類包含Java實現的源代碼,以實現與Objective-C示例相同的結果.希望這將有助于未來的冒險家.

Document myDoc = ...;

Model myModel = ...;

SwingWorker analyzeDocument = new SwingWorker() {

@Override

public Dictionary doInBackground() {

return myDoc.analyze();

}

@Override

public void done() {

try {

stats = get();

myModel.setDict(stats);

myModel.setNeedsDisplay(true);

} catch(InterruptedException ex) {

// log

} catch(ExecutionException ex) {

// log

}

}

};

analyzeDocument.execute();

原帖

在并發編程方面,我缺乏經驗,我希望有人能夠向我解釋如何實現這一目標.

在Objective-C(使用GCD)中,您可以執行以下操作:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, NULL), ^{

NSDictionary *stats = [myDoc analyze];

dispatch_async(dispatch_get_main_queue(), ^{

[myModel setDict:stats];

[myStatsView setNeedsDisplay:YES];

[stats release];

});

});

此代碼將在后臺線程中執行[myDoc analyze],在回調函數之后更新將在主線程中執行的UI.換句話說,后臺線程向主線程發送一個中斷,將匿名函數添加到要調用的主線程隊列中.顯然我不能在Java中使用匿名函數,但這不是重點.

我有興趣在Java中做這件事.我有一個Runnable對象,它在文件系統中做了很多東西.完成后,我想相應地更新UI.

為了在執行此操作時不掛起主線程(即:backgroundThread.join();),我設置了后臺線程來執行回調函數來更新UI.但這不是一個好主意,我不希望非GUI線程更新GUI.

我想到的其他一些想法是投票,但這似乎是拋出窗口的循環.根據同樣的判斷,使用期貨似乎也不是答案.這一切似乎都打敗了異步操作的目的.

我能想到的唯一另一件事是從后臺線程使用SwingUtilities.invokeLater并使用它來更新GUI.但我很好奇這將執行哪個線程.

也許我的看法只是扭曲了,但這似乎是一個非常重要的部分.我只是想以錯誤的方式解決這個問題嗎?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 线程 函数_java – 从后台线程调用主线程上的函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。