[英]How to implement a thread to my home-made desktop application
我已經建立了一個連接數據庫的桌面應用程序,功能是添加-刪除-修改。 我將其與3 JInternalFrame分開。
現在的問題是,當我執行批量更新以更新> 500個訂單時,我的應用程序將掛起,但它正在處理請求。 然后,我將再次運行此應用程序,因此現在我使用同一應用程序打開了2個窗口。 在完成第一個應用程序的工作后,我可以再次使用以前的應用程序。
現在我的問題是,如何對我的應用程序實現線程,以便我可以在同一窗口應用程序中運行盡可能多的功能?
長時間運行的任務(例如批量更新)一定不能在事件分發線程(進行所有GUI操作的線程)中完成,否則,正如您所觀察到的,GUI凍結了。
使用SwingWorker在后台線程中執行長時間運行的任務。 它的javadoc有一個有用的示例,在Swing教程中也有描述。
現在,通過添加[java.util.concurrent.][1]
,java中的多線程非常簡單[java.util.concurrent.][1]
您需要做的是
對於線程池,您可以使用以下之一
Executors.newFixedThreadPool or Executors.newCachedThreadPool()
我只是用:
new Thread(new Runnable()
{
public void run()
{
//Things to do in new thread...
}
}).start();
或者,如果您想經常使用它,則可以使實現Runnable的類成為可能,因此您不必重寫run()函數中的所有內容。
您應該做的是將UI類與數據庫訪問和修改類分開。 然后,您可以從用戶界面中調用類似以下內容的代碼:
new Thread(new Runnable()
{
public void run()
{
//Call database stuff here
}
}).start();
但是請注意,同時進行大量數據庫操作會導致錯誤,特別是因為數據庫可能會鎖定當前正在對其進行讀取/寫入的表。 我建議您一次將其保留一個操作,然后使用線程顯示選取框進度欄或類似內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.