簡體   English   中英

使線程休眠,直到完成其他工作

[英]Making a Thread sleep until some other work is done

我的應用程序啟動,它將在其中自動創建一些數據庫表(如果不存在)並在這些表中創建一些默認值(使用swingworker在后台執行此操作)。 然后應用程序繼續並從那些表中讀取一些數據,我需要第二個過程(從那些表中讀取)等待幾秒鍾,直到從上一步創建表為止。 我用過Thread.sleep(2000); 但是在NetBeans中不接受它,因為當我像這樣打開窗口時,這是堆pepeWindowOpened(java.awt.event.WindowEvent evt)我該怎么做?

java.util.concurrent比Swing Worker更可移植。

使用執行程序“單線程”確保作業是順序的,並盡快執行。

import java.sql.Connection;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class DatabaseLayer {

   private Connection _connection;

   public DatabaseLayer( /* some args here */ ) {
      // _connection = ... use args
      final ExecutorService executor = Executors.newSingleThreadExecutor();
      executor.submit( this::create );
      executor.submit( this::read );
   }

   void create() {
      _connection = null;
      System.err.println( "Create database..." );
   }

   void read() {
      System.err.println( "Read database..." );
   }
}

public class Main /* extends swing JFrame or javafx Application */ {

   private DatabaseLayer _dbLayer;

   public void start() {
      _dbLayer = new DatabaseLayer(
         /* get parameters from properties file or command line */);
   }

   public static void main( String[] args ) {
      // create user interface from args
   }
}

您可以使用其他軟件包:

  • db層:幾個類
  • 應用邏輯:每個業務邏輯轉換一個
  • 演示文稿:您可以在桌面(swing或javafx)或Web ui之間進行選擇

更好的方法是使用CompletableFuture(Java 8),通過此API,您可以鏈接執行並仍使用單獨的線程-> https://www.baeldung.com/java-completablefuture

實際上,我找到了一種解決問題的簡便方法,我只是在創建表的類中手動創建了一個JFrame,然后再將其處理掉,就像這個主線程以連續的方式繼續正常運行一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM