我有一个线程,它会在一定时间间隔后以固定间隔在后台执行某些任务。

但是我想控制何时应该杀死线程,这是我实现它的方式。

class Task extends Thread { 
  private boolean kill= false,repeat = false;
  public void kill() {
    kill = true;
  }
  public void repeat() {
    repeat = true;
  }
  public void run() {
    do {
      //wait until the required time has elapsed
      while(!isTimeElapsed() && !kill) {
       Thread.sleep(1000);
      }
      if(!kill) {
      //time to work, do stuff
      }
    } while(repeat & !kill);
  }
}

该代码按我的要求工作,但是Netbeans通知我说:“ 循环调用Thread.sleep()可能会导致性能问题 ”。 但这并没有建议做我想做的更好的方法。

但是,是否有更好的方法来执行我想要的操作,即让线程等待固定的时间,但又具有在我想执行的任何时候都杀死线程的灵活性?

===============>>#1 票数:2

这将创建您的类的实例,并每1秒钟运行一次。

Timer timer = new Timer();
TimerTask myTask = new MyTask();
timer.schedule(myTask,1000,1000);

MyTask需要扩展TimerTask而不是Thread。

===============>>#2 票数:2 已采纳

这是一个原始示例,演示如何使用它们:

import java.util.Timer;
import java.util.TimerTask;

public class Greeter {
   private static class SayHello extends TimerTask {
      @Override
      public void run() {
         System.out.println("Hello");
      }
   }
   public static void main(String[] args) throws InterruptedException {
      Timer t = new Timer();
      int delay = 0;
      int period = 1000; // milliseconds
      t.scheduleAtFixedRate(new SayHello(), delay, period);

      Thread.sleep(5000); // Do something

      t.cancel();
   }
}

  ask by anu translate from so

未解决问题?本站智能推荐:

1回复

在绘画中使用thread.sleep方法

我有一个工作代码,基本上可以在屏幕上绘制15个矩形,您可以在其中拖动。 我这样做是为了使矩形随着时间的流逝落在屏幕的底部。 当我使用thread.sleep方法时,可以使用较大的数字(例如500),但是当矩形掉落时,我仍然可以在屏幕上拖动矩形,没有问题。 但是随着我开始将thread.sl
1回复

使用Thread.sleep()时run()方法出错

我试图在自己的线程中运行一个Elevator实例。 正在调用run()方法,但是我的代码中一定存在阻止其运行的错误。 我的代码可以编译并正常运行,但是“电梯启动”从未打印过。 我认为这与需要抛出InterruptedException的Thread.sleep()有关。 由于Runn
1回复

使用异步servlet时Thread.Sleep()的替代方法?

我想要做的就是等待用户在特定网页进来,所有的请求(他们是在即将在大约相同的时间),然后在一个servlet处理它们,检查该请求发送正确的价值对于一些参数,并将最终结果输出给所有用户。 我为此使用asyncContexts,目前正在根据每个用户的请求为其使用Thread.Sleep(1000),
1回复

Thread.sleep方法永久停止线程

上面的代码试图创建竞争条件,但是在SelfRunner.run ,对Thread.sleep(250)的调用会暂停程序执行,而不会在命令行中输出输出。 当我注释掉该行时,它工作正常。 谁能告诉我为什么?
3回复

使用Thread.currentThread()。isInterrupted()与Thread.sleep()

我有一个线程调用work()方法,这是一个简单的while(true)-loop,如下所示; 我运行了该线程实例,并在一段时间后使用Thread.sleep()方法从主线程中中断了线程。 当我更改延迟时,当线程从主线程中断时,我希望能打到注释部分,但我只会看到下面的输出; 我的
2回复

线程延迟使用调度程序或Thread.Sleep

在我的应用程序中,我正在调用第三方供应商Web服务。 我需要延迟我的线程处理以实现供应商webservice支持的所需吞吐量。 我有两个选项1.使用Thread.Sleep 2.使用后面提到的ScheduledThreadPoolExecutor 如何在java中指定的时间延迟后启动一个
4回复

Java中Thread.sleep()的替代方法

我在我的应用程序中使用spring ThreadPoolTaskExecutor 。 仅在星期五午夜才需要调用我的一种方法。 在服务器启动时调用该方法。 所以我以以下方式使用Thread.sleep() 在某些情况下,它可能还要等待1天以上。 有没有比使用Thread.sleep
1回复

Java - Thread.sleep里面的run方法

我正在学习一个教程,下面是生成逻辑和帧更新的run方法。 我理解滴答是如何更新60滴/秒,但我不明白我们如何调整每秒帧数。 现在使用Thread.sleep(2),每秒帧数大约为460.没有它,数字会上升,每秒大约1000万次更新。 代码Thread.sleep(2)暂停线程仅2毫秒对
1回复

包含Thread.sleep的JUnit测试方法

我有一个正在测试的系统,它模拟电梯。 我正在测试电梯是否到达特定楼层。 这是我测试的代码: 现在方法moveLift调用这段代码: animateUp调用此方法: 如你所见,时间是一个重要因素。 现在,根据我目前的测试,电梯不会移动。 很明显,我必须等待电梯移动,
1回复

寻找使用thread.sleep暂停线程

我正在使用鼠标侦听器来按下和释放鼠标。 按下鼠标时,我想让计数器增加一个变量,释放鼠标时,我要减少该变量。 现在,我的代码可以正常工作,但是这样做的速度太快了,我想减慢速度,因为我将这些数字用作游戏中的坐标。 我尝试添加Thread.sleep(100),但是输出偏斜。 似乎有多个线程同