我试图想出一个概念,在GUI中我可以给出一个查询并指定起搏和持续时间。就像我给它2分钟和5小时......它翻译像每2分钟运行给定的查询接下来的5小时。虽然我的GUI已准备好并且能够提交查询...我无法引入上述指定的时间概念。虽然我确信这可以通过线程完成...我发现很难代码吧...这里的任何人都可以帮助我解决这个问题的基本方法吗?有没有比线程更好更简单的方法?请帮忙..
答案 0 :(得分:3)
举个例子,如果你有一个想要每2分钟运行5小时的查询,你需要做的是计算你想要执行查询的次数。
2 minutes = 120 seconds.
5 hours = 18,000 seconds.
Number of times (iterations) = 18,000 / 120 = 150 iterations.
因此,您需要每120秒(或120,000毫秒)提交150次查询。
如果要使用GUI提交多个查询,则必须使用线程。
编辑添加:根据assylias的评论,这里有一些代码
public void runQuery(int interval, int duration) {
final Runnable query = new Runnable() {
@Override
public void run() {
// Run query
}
};
ScheduledExecutorService scheduler = Executors
.newScheduledThreadPool(1);
final ScheduledFuture<?> queryHandle = scheduler.scheduleAtFixedRate(
query, 0, interval, TimeUnit.SECONDS);
scheduler.schedule(new Runnable() {
@Override
public void run() {
queryHandle.cancel(true);
}
}, duration, TimeUnit.SECONDS);
}
只需使用Thread,这是另一个版本。
public void runQuery(int interval, int duration) {
final Runnable query = new Runnable() {
@Override
public void run() {
// Run query
}
};
int iterations = duration / interval;
for (int i = 0; i < iterations; i++) {
new Thread(query).start();
for (int j = 0; j < interval; j++) {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
}
}
}
}
Runnable
查询只是这些代码示例中的占位符。
您必须编写一个实现Runnable
的类,并将查询结果传递回GUI。由于您不在Swing Event Dispatch线程中,因此您必须使用SwingUtilities.invokeLater()
方法来实际进行GUI更改。
您可以将类的实例传递给其中一个线程方法,以便在传递的时间间隔和持续时间内执行。