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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值