守护线程:
t.setDaemon(true)为守护线程,也叫精灵线程,若主线程启动t线程,则t线程是主线程的守护线程,当主线程执行完了,则守护线程也随之结束。也就是说,只要是那个线程启动守护线程,守护线程就等待该线程直到执行结束。守护线程往往是给主线程清除障碍的,比如服务器的面临可能会有崩溃的情况,守护线程会提主线程监视服务器的运行情况。
代码实现:
package edu.xalead;
class PQ implements Runnable{
@Override
public void run() {
// Thread t2 = new Thread(new PQ(),"ASA");
// t2.start();
while(true){
System.out.println(Thread.currentThread().getName());
}
}
}
public class 守护线程 {
public static void main(String[] args) {
Thread t = new Thread(new PQ());
// t.setDaemon(true); // 设置守护线程 守护主线程 t守护主线程 谁启动就守护谁
// Thread t2 = new Thread(new PQ(),"ASA");
// t2.setDaemon(true);
t.start();
//t1是守护线程,t1守护主线程,当主线程执行完的时候,守护线程就结束
t.stop(); // 不安全
t.suspend(); //易出现死锁现象
t.resume(); //易出现死锁现象
for(int i =0;i<1000;i++){
System.out.println(Thread.currentThread().getName());
}
}
}
运行结果:
中断线程:
t.stop(); // 不安全 t.suspend(); //易出现死锁现象 t.resume(); //易出现死锁现象
中断线程是改变线程的状态,使之中断,常用的是t.interrupt();
代码实现:
package edu.xalead;
class T6 extends Thread{
public void run(){
try {
while(true) {
System.out.println(this.isInterrupted());//默认false
if(this.isInterrupted()){
break;
}
System.out.println(Thread.currentThread().getName());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class 杀死线程 {
public static void main(String[] args) {
T6 t = new T6();
t.start();
//t.interrupt(); //是否中断 改为 true
long tt = System.currentTimeMillis();
while(System.currentTimeMillis() < tt + 10);//10s之后状态中断
//Thread.sleep(100);
t.interrupt(); //改变状态 中断
}
}
运行结果: