java-在一个专门的线程中处理中断任务

  • Post author:
  • Post category:java


用来执行的线程拥有自己的执行策略,即使任务不响应中断,限时运行的方法仍然返回到它的调用者。在开始任务线程之后,timeRun会在新创建的线程中执行一个限时的join方法。

在调用线程中运行任务,并在调度中安排了一个取消任务,由这个任务在给定时间间隔后中断它。

private static final ScheduleExecutorServicecancelExec=……..;

public static void timedRun(final Runnable r,longtimeout,TimeUnit unit)

throws InterruptedExcepion{

classRethrowableTask implements Runnable{

private volatile Throwable t;

public void run(){

try {r.run();}

catch(Throwable t) {this.t=t;}

}

void rethrow(){

if (t!=null) throw launderThrowable(t);

}

}

RethrowableTask task=new RethrowableTask();

finalThread taskThread=new Thread(task);

taskThread.start();

cancelExec.schedule(newRunnable(){public voidrun(){taskThread.interrupt();}},timeout,unit);

taskThread.join(unit.toMillis(timeout));

task.rethrow();

}



版权声明:本文为deepfuture原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。