亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

蝴蝶刀刀 2022-06-04 10:41:40
我的應用程序啟動,如果不存在,它將自動創建一些數據庫表,并在這些表中創建一些默認值(使用 swingworker 在后臺執行此操作)。然后應用程序繼續并從這些表中讀取一些數據,我需要第二個進程(從這些表中讀?。┑却龓酌腌姡钡綇纳弦徊絼摻ū?。我用過 Thread.sleep(2000); 但它在 NetBeans 中不被接受,因為當我像這樣 formWindowOpened(java.awt.event.WindowEvent evt) 那樣打開窗口時,我該怎么做?
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

java.util.concurrent比 Swing 工作者更便攜。

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

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 之間進行選擇


查看完整回答
反對 回復 2022-06-04
?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

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


查看完整回答
反對 回復 2022-06-04
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

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



查看完整回答
反對 回復 2022-06-04
  • 3 回答
  • 0 關注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號