Java中的计时器和线程难度很大

时间:2014-03-18 05:31:11

标签: java multithreading timer

两个线程开始。我想在2秒内中断第一个线程。 你能帮我理解我的计时器错误吗?它似乎没有打断线程。

class ThreadTask extends TimerTask {

    @Override
    public void run() {
        firstThread.interrupt();
        System.out.println("firstThread has been terminated.");
    } // run
} // class ThreadTask

Timer timer = new Timer();
ThreadTask task = new ThreadTask();
timer.schedule(task, new Date().getTime() + 3000);

2 个答案:

答案 0 :(得分:2)

似乎使用方法Timer.schedule时出错。

您正在使用:

  

public void schedule(TimerTask任务,长延迟)计划   在指定的延迟后执行的指定任务。参数:   任务 - 要安排的任务。延迟 - 任务前的毫秒延迟   将被执行。

如果你花费当前时间+ 2秒,那么线程将停止工作〜44年。

使用:

timer.schedule(task, 3000);

答案 1 :(得分:0)

中断线程的示例代码。

Thread.currentThread().isInterrupted()方法

中检查Thread.run()

Timer必须从Thread.run()方法启动,如果您想在开始执行3秒后中断它。

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

public class ThreadTimer implements Runnable {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Thread(new ThreadTimer()).start();
    }

    @Override
    public void run() {
        Timer timer = new Timer();
        ThreadTask task = new ThreadTask(Thread.currentThread());
        timer.schedule(task, 3000);

        while (true) {
            if (Thread.currentThread().isInterrupted()) {
                break;
            }
            System.out.println(Math.random() * 1000);
            // do whatever you want to do here
        }
    }

}

class ThreadTask extends TimerTask {

    private Thread thread;

    public ThreadTask(Thread thread) {
        this.thread = thread;
    }

    @Override
    public void run() {
        thread.interrupt();
        System.out.println("Thread has been terminated.");
    } // run
} // class ThreadTask

如果上述代码不符合您的要求,请使用ExecutorService.awaitTermination()作为执行此操作的最佳选择

这是 Sample Code