Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-执行流_Java_Swing - Fatal编程技术网

Java-执行流

Java-执行流,java,swing,Java,Swing,我还是个新手,这更像是一个好奇/想学的问题 我创建了一个小型swing应用程序,用于连接、检索数据和断开与数据库的连接。它工作正常,我没有任何问题 从控制器中,我调用以下方法: 1----> db.connectDB(); 2----> db.doSomeAction(); 3----> db.disConnectDB(); 现在,我的问题是,方法3是否会等到方法2从数据库中检索到整个结果集(类似于1000000条记录),然后才执行以断开与数据库的连接

我还是个新手,这更像是一个好奇/想学的问题

我创建了一个小型swing应用程序,用于连接、检索数据和断开与数据库的连接。它工作正常,我没有任何问题

从控制器中,我调用以下方法:

   1----> db.connectDB();

   2---->  db.doSomeAction();

   3----> db.disConnectDB();
现在,我的问题是,方法3是否会等到方法2从数据库中检索到整个结果集(类似于1000000条记录),然后才执行以断开与数据库的连接

方法1、2和3不返回任何东西,除非它们将执行操作。如何确保在我仍在从数据库检索记录时不会断开连接


我正在使用SwingUtilities.InvokeLater方法来执行我的应用程序。这种情况还会发生吗?

如果从同一线程内调用这三个方法,它们的调用将是顺序的,因此方法3将等待方法2的结尾开始。

如果从同一线程内调用这三个方法,它们的调用将是顺序的,因此,方法3将等待方法2的结尾开始。

完全取决于
db
是什么,具体取决于
doSomeAction()
的行为。可以是同步的,也可以是异步的。不应使用invokeLater()进行数据库访问。这将冻结GUI。请一个摇摆工人。然后在非GUI线程上完成DB访问代码。数据库访问完成后,您将发布结果,然后可以在EDT上对GUI进行更新。@user547453,您想错了。人们总是拒绝投票,却没有提供任何对任何人都没有价值的理由。给人们一点权力…如果方法从另一个线程访问对象,是的,您需要同步,例如访问表模型。另一种方法是让SwingWorker返回数据库记录列表(而不是结果集),然后填充表模型。第二种方法可以节省同步时间。数据库查询将等待查询完成,这就是为什么代码应该在单独的线程中执行的原因。不需要同步。我指的是Igor建议的第二种方法。我会在SwingWorker中创建一个新的TableModel。然后可以发布模型并用新模型重置表。这完全取决于
db
是什么,特别是
doSomeAction()
的行为。可以是同步的,也可以是异步的。不应使用invokeLater()进行数据库访问。这将冻结GUI。请一个摇摆工人。然后在非GUI线程上完成DB访问代码。数据库访问完成后,您将发布结果,然后可以在EDT上对GUI进行更新。@user547453,您想错了。人们总是拒绝投票,却没有提供任何对任何人都没有价值的理由。给人们一点权力…如果方法从另一个线程访问对象,是的,您需要同步,例如访问表模型。另一种方法是让SwingWorker返回数据库记录列表(而不是结果集),然后填充表模型。第二种方法可以节省同步时间。数据库查询将等待查询完成,这就是为什么代码应该在单独的线程中执行的原因。不需要同步。我指的是Igor建议的第二种方法。我会在SwingWorker中创建一个新的TableModel。然后您可以发布模型并用新模型重置表。@Igor…即使这些方法没有重新运行任何内容?@user547453是的,没有区别。@Igor…即使这些方法没有重新运行任何内容?@user547453是的,没有区别。