当前位置:  开发笔记 > 编程语言 > 正文

间隔运行Java线程

如何解决《间隔运行Java线程》经验,为你挑选了2个好方法。

我有一个需要每10秒执行一次的线程.该线程包含对另一台服务器上的数据库的多次调用(12-15).此外,它还可以访问大约3个文件.因此,将会有相当多的IO和网络开销.

执行上述操作的最佳策略是什么?

一种方法是使用sleep方法和while循环,但这将是一个糟糕的设计.

在这种情况下,类似于Timer的类会有用吗?另外,最好是创建几个线程(一个用于IO,一个用于JDBC),而不是让它们在一个线程中运行?



1> Greg Case..:

我发现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);



2> Neil Coffey..:

一种选择是创建ScheduledExecutorService,然后可以将作业调度到该服务:

ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.scheduleWithFixedDelay(...);

如果您确实决定有多个线程,则可以创建具有更多线程的ScheduledExecutorService(同样,通过Executors类)。

就性能多少而言,就性能而言,我想说这取决于:

对于您的特定应用程序,一个线程可以真正“工作”,而另一个线程正在等待I / O吗?

您的多个线程最终是否会“破坏相同的资源”(例如,从同一dsk上不同位置的文件中读取)并因此使对方速度变慢,或者它们会同时占用不同的资源?

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有