终止Runnable

时间:2017-05-24 06:43:02

标签: java runnable terminate

我有一个任务执行器,它将runnable作为一项任务。我在调用runnable.run()方法之前启动一个计时器,并在runnable完成时停止它。如果计时器超过时间限制,我想从执行程序本身终止run()方法的执行。我不知道用户将在run()中实施什么。

TaskExecutor.add(new Runnable () {
    @Override
    public void run() {
        System.out.println("This is test job");
    }}
);

这是用户添加新任务的方式。每个任务都在同一个线程中运行。

修改
此任务执行程序将充当用户的service。并且因为创建线程是昂贵的操作并且需要native OS调用,所以我试图避免它们。否则我会在某个时候打电话给Thread.interrupt()。但我只是想知道是否有办法从父对象终止 run()方法。终止意味着突然停止某些事情。我们如何在OS任务管理器中终止进程。

如何执行任务

while (jobQueue.isEmpty()) {
    for (Job job : jobQueue) {
       long startTime = System.currentTimeMillis();
       job.run();
       //There is a separate thread which checks
       //for timeout flags by comparing the startTime
       //with the current time. But all tasks are
       //executed in the same thread sequentially. I
       //only want to terminate single jobs that are
       //timed out.
    }
}

2 个答案:

答案 0 :(得分:0)

你可以检查你的计时器的条件,如果计时器超过你可以打断你的线程,如 -

Thread.currentThread().interrupt();

它会停止你当前的线程。

答案 1 :(得分:0)

  

我只想知道是否有办法从父对象终止run()方法。

你无法真正终止某个方法,而且你无法真正从对象中做任何事情。

通常很方便地说“此对象执行 X ”或“此方法执行 Y ”,但对象和方法实际上并没有做任何事情。当你谈论多线程代码时,重要的是要意识到程序所做的一切都是由线程完成的。方法只是告诉线程做什么的指令,而对象就是线程所做的事情。

你可以中断一个线程,如果该线程被设计为优雅地处理中断,那么这只是一个好主意;你可以终止一个线程,基本上永远是一个好主意。

线程应始终彼此合作。您需要提供一种方法,通过该方法,您的程序可以礼貌地询问客户提供的回调以中止其工作并提前返回。如果客户端代码不尊重您的请求(即,如果客户端代码不合作),则客户端程序员因不遵守您的准则而出现错误。

最简单的方法是简单地公开客户端可以定期检查的一些static boolean方法,看看是否该中止。