线程与计时器相比等增量变量

时间:2013-11-30 16:13:28

标签: java android multithreading timer

我看过许多关于使用Runnable,TaskTimers,Timers,Threads等的帖子,但它们都开始看起来一样。所以这是一个两部分的问题:

  1. 如果我想每x秒将变量增加一次n,我想使用哪个? (我需要我的程序的其余部分才能运行而不会跳过一个节拍!)

  2. 我为什么要用它?

2 个答案:

答案 0 :(得分:1)

ScheduledExecutorService executor = Executors.newScheduledThreadPool(1, new ThreadFactory() {
  public Thread newThread(Runnable r) {
    final Thread result = new Thread(r);
    result.setPriority(Thread.MAX_PRIORITY);
    return result;
  }
});

executor.scheduleAtFixedRate(new TotallyImportantTask(), 0, 10, TimeUnit.SECONDS);

定时器不起作用,因为您无法设置实际的线程优先级,因此它可能会也可能不会运行,具体取决于实际负载。

线程不起作用,因为你需要在一个循环中调用Thread.sleep(x),并且不能保证它会在x秒后实际唤醒。根据操作系统和情况,时间可能略有不同或大不相同。

ScheduledExecutorService实际上使用OS调度服务(如果有的话),并保证在正确的时刻以高优先级启动线程,因此所有其他线程将(如果需要)被搁置。

答案 1 :(得分:0)

计时器方法: public void schedule(TimerTask任务,             日期firstTime,             长时间) 可能就是你想要的。