编写复习线程的最佳方法

时间:2013-03-25 09:10:07

标签: java multithreading

您好我有一些配置可在可配置的时间跨度后刷新。这样做或以下的最佳方式是什么?

@Override
    public void run()
    {
        try
        {
            while(true){
                if (isRefreshNeeded) {
                    refresh()
                }
            }
        }
        catch( Exception excep )
        {
            // Log and report exception 
        }
    }

5 个答案:

答案 0 :(得分:1)

我建议使用Timer类,这就是它的用途。

使用您的代码不是一个好主意,因为它会一直在迭代,从而消耗CPU周期。

答案 1 :(得分:1)

尝试使用Timer类:

long initialDelay = 100; // In millis
    long delay  = 1000; // In millis

    Timer timer = new Timer("Refresher thread");
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            // code to refresh the configurations

        }
    }, initialDelay, delay);

答案 2 :(得分:0)

除了使用Timer / TimerTask或更现代的ScheduledExecutorService / Runnable方法在一段时间后刷新,您或许应该在更改和刷新之间建立因果关系使用Listener(aka Observer)模式。 如果您对发布的代码更为满意,则至少应在Thread.sleep()循环结束时使用while

答案 3 :(得分:0)

java.util.concurrent中存在最干净的选项之一ScheduledExecutorService#scheduleAtFixedRate

Here是API文档

答案 4 :(得分:0)

尝试使用http://commons.apache.org/proper/commons-configuration/

我相信它已经足够简化,可以轻松使用。