爲了保持GUI響應,有必要在與事件分派線程不同的線程上執行長時間運行的任務,例如數據庫訪問。 爲此,有兩個主要的選擇:創建一個SwingWorker並調用程序邏輯對象的方法(使它們交易安全!),或創建一個Thread類並將請求轉發給它(如此處所示:Java desktop - how to separate database access from the UI thread?)。 您認爲哪種方法和哪種方法是更好的方法,特別是從設計的角度來看?用於GUI應用程序線程化的最佳方法(Java,swing)
0
A
回答
1
您還可以使用SwingUtilities.invokeLater()
2
的問題很廣,沒有任何顯著上下文。
SwingWorker
是「一般」我的,因爲它是簡單的首選解決方案,有多種方式可以與它進行交互(publish
/process
,done
,PropertyListener
),並可以專門爲工作單元,不管是工作的重複單元或單個運行情況。
SwingWorker
有侷限性,首先,它只允許同時運行10個同時工作人員,它使用一個Thread
的池(爲了簡單起見),但它重用,但池是有限的到10,你無能爲力。如果您預計需要進行大量併發處理,這可能會成爲問題,但如果您只是「希望完成工作」而不關心某些工作是否排隊等待一段的時間。
使用一個Thread
和隊列可以工作,再次假設您不介意一次只完成一項工作,而另一項任務可能會排隊一段時間。這種方法的複雜性在於設置回調過程,該過程可以使用類似於Observer Pattern或Producer/Consumer Pattern的方式將工作人員Thread
的數據/結果返回到EDT環境中的UI,其方式足夠靈活,SwingWorker
已經做了。
我的第一個想法是,專注於創建一個可以檢索數據的過程,而不用擔心併發或UI。一旦你可以建立它,你可以在它上面添加另一個併發的圖層,因爲並不是代碼的每個方面都可能關心爲UI獲取數據。
從那裏您可以設計訪問機制,您的UI代碼將根據您的需要使用這些訪問機制來訪問這兩個其他圖層。
這是所有的理論和整體問題的上下文將決定你可能遵循哪些路徑(或其組合)(數據庫是否支持併發訪問?你想多重/併發訪問還是你不在乎?等)。你可以嘗試和解耦你的代碼,這將允許你改變一個單獨的圖層,而不必(很大程度上)修改其他的圖層。
相關問題
- 1. 測試使用Java Swing編碼的應用程序GUI:最佳方法?
- 2. 構建Java Swing GUI的最佳方法?
- 3. Java桌面應用程序(awt/swing GUI)到Web應用程序
- 4. 國際化Java Swing桌面應用程序的最佳做法是什麼?
- 5. 用於軟件的Java Swing GUI,最好的方法
- 6. 適用於Android 2d繪圖應用程序的最佳方法
- 7. 使Java Swing應用程序持久化
- 8. 今日適用於離線網絡應用程序的最佳方法
- 9. Java Swing中的線程,應用程序中的三種方法的概述
- 10. 音樂可視化/互動應用程序的最佳方法
- 11. ios應用程序模塊化的最佳設計方法
- 12. 什麼是優化鈦應用程序的最佳方法?
- 13. 適用於Java/Swing的最佳GUI生成器
- 14. 用於Java swing應用程序的安裝程序與IZpack
- 15. Java的可贖回線程Swing GUI的
- 16. 存儲應用程序狀態java的最佳方法
- 17. 驗證Java服務器應用程序的最佳方法
- 18. 企業Java Web應用程序的最佳方法
- 19. 分配Java應用程序的最佳方法?
- 20. 德爾福:應用程序初始化 - 最佳實踐/方法
- 21. 如何最大化java swing應用程序
- 22. 如何使用TCL代碼產生java gui swing應用程序
- 23. Java - 使用Swing GUI運行Web應用程序
- 24. Java Webcam GUI應用程序
- 25. Java GUI應用程序
- 26. Java GUI JList應用程序
- 27. Java GUI應用程序?
- 28. 應用程序的最佳方式
- 29. Swing應用程序多線程設計模式和最佳實踐
- 30. 基於控制檯的應用程序到基於Java的GUI應用程序