/**
* 中断线程的一个方法
* 基本思想:
* 利用守护线程
*/
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,发现能达到中断线程的效果,不过对于它的安全性
//和稳定性还不清楚,希望高手可以给指点指点.