日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/9/27 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 线程 函数_java – 从后台线程调用主线程上的函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

更新

我已經(jīng)更新了這個(gè)問題,使用建議的SwingWorker類包含Java實(shí)現(xiàn)的源代碼,以實(shí)現(xiàn)與Objective-C示例相同的結(jié)果.希望這將有助于未來的冒險(xiǎn)家.

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();

原帖

在并發(fā)編程方面,我缺乏經(jīng)驗(yàn),我希望有人能夠向我解釋如何實(shí)現(xiàn)這一目標(biāo).

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

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];

});

});

此代碼將在后臺(tái)線程中執(zhí)行[myDoc analyze],在回調(diào)函數(shù)之后更新將在主線程中執(zhí)行的UI.換句話說,后臺(tái)線程向主線程發(fā)送一個(gè)中斷,將匿名函數(shù)添加到要調(diào)用的主線程隊(duì)列中.顯然我不能在Java中使用匿名函數(shù),但這不是重點(diǎn).

我有興趣在Java中做這件事.我有一個(gè)Runnable對(duì)象,它在文件系統(tǒng)中做了很多東西.完成后,我想相應(yīng)地更新UI.

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

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

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

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。