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