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