我們一般使用多線程,都是while的死循環,想要結束線程,只需退出死循環即可
當線程中調用了sleep()方法或者wait()方法,當前的線程就會進入凍結狀態,這個線程就結束不了
調用Thread對象的interrupt()方法,可以強制解凍,此時run()方法中需要捕獲到InterruptException異常,然後進行處理,就可以關閉線程了
調用Thread對象的setDaemon()方法,參數:true
守護線程是後台線程,當前台線程全都結束以後,後台線程自動結束
class Ticket implements Runnable {
private int nums = 100;
@Override
public void run() {
while (true) {
synchronized (this) {
if (nums > 0) {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "==="
+ (nums--));
}else{
break;
}
}
}
}
}
public class TicketDemo {
/**
* @param args
*/
public static void main(String[] args) {
Ticket ticket = new Ticket();
Thread t1=new Thread(ticket);
Thread t2=new Thread(ticket);
t1.setDaemon(true);
t2.setDaemon(true);
t1.start();
t2.start();
//主線程執行1秒就結束,其他守護線程還沒走完也會結束
while(true){
try {
Thread.sleep(1000);
break;
} catch (Exception e) {
e.printStackTrace();
}
}
}
}