我试图提出一个概念,在 GUI 中我可以给出一个查询并指定起搏和持续时间。就像我给它 2 分钟和 5 小时 ..这意味着每 2 分钟运行下一个 5 小时的给定查询。 .尽管我的 GUI 已准备好并且能够提交查询...我无法引入上述指定的时间概念..尽管我确信这可以通过线程来完成...我发现很难对其进行编码。 ..这里的任何人都可以帮助我解决这个问题的基本方法吗?有没有比线程更好更简单的方法?请帮忙..
问问题
478 次
1 回答
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);
}
只是使用线程,这是另一个版本。
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 更改。
您可以将您的类的一个实例传递给这些线程方法之一,以便在您传递的时间间隔和持续时间内执行。
于 2013-01-24T18:42:05.923 回答