我们一般使用多线程,都是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(); } } } }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12645.html