我們一般使用多線程,都是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(); } } } }