为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蝴蝶刀刀 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 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信