Thread类中stop方法停止线程存在安全隐患,怎么让一个线程停止运行呢?
线程的运行一般都是循环控制体,通过改变run方法
循环控制条件,即可让线程停止。
但是在有特殊情况,比如线程处于冻结状态(wait sleep),改变循环控制条件并不能
停止线程,那么该如何处理呢?----可以使用interrupt方法强制唤醒线程,再改变run方法的循环控制条件,让线程停止运行。
线程的运行一般都是循环控制体,通过改变run方法
循环控制条件,即可让线程停止。
class ThreadStopDemo
{
public static void main(String[] args)
{
ThreadStop ts=new ThreadStop();
Thread t1=new Thread(ts);
Thread t2=new Thread(ts);
t1.start();
t2.start();
int num=0;
while(true)
{
if(num++==50)
{
ts.changeFlag();
break;
}
System.out.println(Thread.currentThread().getName()+"main...run"+num);
}
System.out.println("over");
}
}
class ThreadStop implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
System.out.println(Thread.currentThread().getName()+"ThreadStop......run");
}
}
public void changeFlag()
{
flag=false;
}
}
但是在有特殊情况,比如线程处于冻结状态(wait sleep),改变循环控制条件并不能
停止线程,那么该如何处理呢?----可以使用interrupt方法强制唤醒线程,再改变run方法的循环控制条件,让线程停止运行。
class ThreadStopDemo1
{
public static void main(String[] args)
{
ThreadStop ts=new ThreadStop();
Thread t1=new Thread(ts);
Thread t2=new Thread(ts);
t1.start();
t2.start();
int num=0;
while(true)
{
if(num++==50)
{
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+"main...run"+num);
}
System.out.println("over");
}
}
class ThreadStop implements Runnable
{
private boolean flag=true;
public synchronized void run()
{
while(flag)
{
try
{
wait();
}
catch (InterruptedException e)
{
System.out.println(Thread.currentThread().getName()+"ThreadStop......Exception");
flag=false;
}
System.out.println(Thread.currentThread().getName()+"ThreadStop......run");
}
}
}