线程执行超时
守护线程定义:
package loci.currency.thread.daemon; public class TimeoutThread extends Thread{ private int timeout; private boolean isCancel = false; public TimeoutThread(int timeout,final Thread currentThread) { super(); this.timeout = timeout; this.setDaemon(true); this.setUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { currentThread.interrupt(); } }); } @Override public void run() { try { Thread.sleep(timeout); if(!isCancel){ throw new IllegalStateException("线程超时了!"); } } catch (InterruptedException e) { e.printStackTrace(); } } public void cancel(){ isCancel = true; } }
demo:
package loci.currency.thread.daemon; /** * @author yaohw * */ public class TestDaemonMain { public static void main(String[] args) { TimeoutThread t = new TimeoutThread(1000,Thread.currentThread()); try { t.start(); Thread.sleep(100000); t.cancel(); } catch (Exception e) { e.printStackTrace(); } } }