/** * 中断线程的一个方法 * 基本思想: * 利用守护线程 */ public class DaemonDemo { public static void main(String[] args) { Thread th = new Thread(new Thread1()) ; th.start(); } } /** * 本类用来计时,时间一到,本线程和它的守护线程都将停止 */ class Thread1 implements Runnable { private long timeLimit = 3000 ; @Override public void run() { Thread th = new Thread(new Thread2()) ; // 设置为守护线程 th.setDaemon(true); // 获取线程启动时间 long startTime = System.currentTimeMillis() ; th.start(); while( System.currentTimeMillis() - startTime < timeLimit ) { try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } // 如果线程结束了,就退出 if(!th.isAlive()) break ; } // 获取运行时间 long useTime = System.currentTimeMillis() - startTime ; if(th.isAlive()) { System.out.println("time limit"); } else { System.out.println("over"); } System.out.println("useTime:" + useTime); // 本线程结束后,守护线程也会结束执行 } } /** * 要限制执行时间的线程 */ class Thread2 implements Runnable { @Override public void run() { for( int i = 0 ; i < 10 ; i ++ ) { System.out.println("thread2 : " + i ); try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } } //小编本来是想写OJ的,需要找到一个方法可以安全的结束一个线程, //在网上搜集资料没有找到自己能用的方法,看到有守护线程的概念, //就写了一个demo,发现能达到中断线程的效果,不过对于它的安全性 //和稳定性还不清楚,希望高手可以给指点指点.