java swing多執行緒處理情況下UI假死的解決

2021-08-19 23:51:21 字數 1014 閱讀 4169

背景&問題

解決方案

swingapi是非執行緒安全的,也就是說不能在任意地方呼叫,它應該只在edt中呼叫。swing的執行緒安全靠事件佇列和edt來保障。eventqueue的派發機制由單獨的乙個執行緒管理,這個執行緒稱為事件派發執行緒(edt)。和其他很多桌面api一樣,swing將gui請求放入乙個事件佇列中執行。 通過edt,使得不具備執行緒安全的swing函式庫避開了併發訪問的問題。

因此,任何涉及多執行緒任務的ui,更新操作要放在主線程,將耗時的業務邏輯另起執行緒執行,保持主線程不被耗時任務中斷即可。

package pdf.page;

...public class makepagegui implements actionlistener, changelistener

public static void main(string args)

public void show()

});} /**

* 監聽的方法

*/public void actionperformed(actionevent e)

beforepage();

// 耗時任務單獨起執行緒執行,不中斷ui的主線程

new thread(() -> page.page(input, config, output, makepage.page_type_tif)).start();

break;

case "timer":

if (page.isdone())

progressbar.setvalue(page.getprogress());

timepass.settext(formattime(page.gettimepass()));

break;

} }// 進度條

public void statechanged(changeevent e)

}}

C 多執行緒處理

region 變數初始化 string tx 任務執行緒分派數 每次設定一組 一組十個執行緒 任務執行緒 限制最多十個執行緒 long threadcount 0 long maxthreadcount 10 manualreseteventslim manual new manualresetev...

多執行緒處理任務

進行任務分解 long begin system.currenttimemillis list futurelist this.getsmoothdatafuture fundidlist,30 阻塞等待所有執行緒全部執行完畢 for futurefuture futurelist log.info...

多執行緒處理任務

業務需求是這樣 接受大量效能資料,要求多執行緒處理效能資料,且在任一時刻同種效能資料只能有一條在處理。這裡有5個類 processscheduler 入口,用於接受效能資料,並將每條效能資料加到佇列中處理 actionexecutor 執行緒池包裝類 actionqueue 任務佇列類,用於儲存同種...