- 停止线程
1.如何停止线程?
只有一种方法,那就是run()方法结束
由于开启多线程运行,运行代码都是循环结构。
所以只要控制住循环,就可以让run()方法结束,即线程结束
2.特殊情况
当线程处于冻结状态,就不会读取到标记,线程也就不会结束
当没有用指定的方式让处于冻结状态的线程恢复到运行状态时,就需要对冻结状态进行清除
强制让冻结状态恢复到运行状态
Thread类中提供了该方法:interrupt()
守护线程
方法:setDeamon(boolean b)
1.必须在启动线程之前调用
2.一旦全是守护线程,则java虚拟机退出,停止运行程序
join()
当线程A执行到了线程B的join方法时,线程A会暂时转入冻结状态,B线程开始执行,待B线程执行完毕以后,A线程才开始执行
join()用来临时加入线程
class StopThread implements Runnable{
private boolean flag=true;
public synchronized void run(){
while(flag)
{
try{wait();}catch (InterruptedException e) {
System.out.println(e.getMessage()+"execption");
flag=false;
}
System.out.println(Thread.currentThread().toString()+".....run");
}
}
public void changeFlag()
{
flag=false;
}
}
public class StopThreadDemo {
public static void main(String[] args) {
StopThread s=new StopThread();
Thread t=new Thread(s);
Thread t2=new Thread(s);
t.start();
t.setPriority(Thread.MAX_PRIORITY);//设置t的优先级为10
t2.start();
int num=0;
while(true)
{
if(num++==60)
{
t.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().toString()+".......main"+num++);
}
}
}