背景&問題
解決方案
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 任務佇列類,用於儲存同種...