Epi*_*aph 16 java multithreading jdbc timer
我有一个需要每10秒执行一次的线程.该线程包含对另一台服务器上的数据库的多次调用(12-15).此外,它还可以访问大约3个文件.因此,将会有相当多的IO和网络开销.
执行上述操作的最佳策略是什么?
一种方法是使用sleep方法和while循环,但这将是一个糟糕的设计.
在这种情况下,类似于Timer的类会有用吗?另外,最好是创建几个线程(一个用于IO,一个用于JDBC),而不是让它们在一个线程中运行?
Gre*_*ase 46
我发现ScheduledExecutorService是一种很好的方法.它可以说比a稍微复杂一些Timer,但在交换中提供了更大的灵活性(例如,您可以选择使用单个线程或线程池;它只需要毫秒以外的单位).
ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();
Runnable periodicTask = new Runnable() {
public void run() {
// Invoke method(s) to do the work
doPeriodicWork();
}
};
executor.scheduleAtFixedRate(periodicTask, 0, 10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
一种选择是创建ScheduledExecutorService,然后可以将作业调度到该服务:
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.scheduleWithFixedDelay(...);
Run Code Online (Sandbox Code Playgroud)
如果您确实决定有多个线程,则可以创建具有更多线程的ScheduledExecutorService(同样,通过Executors类)。
就性能多少而言,就性能而言,我想说这取决于:
| 归档时间: |
|
| 查看次数: |
26567 次 |
| 最近记录: |