線程停止的方法:
記住一點,線程的停止,
1.自己運行完了,
2.如果是無限循環,在外部,只能用flag標記來操作。
但是當線程處於凍結狀態(阻塞),sleep,wait,join,(這三個方法拋出異常。)
就不會讀取到flag.
這個時候,我們要清除線程的凍結狀態,讓它回到運行中。
如果,線程沒有使之凍結的語句,則,inierrupt()不進行任何操作。
interrupt()方法,會使sleep,wait,jion方法拋出異常。
然後,我們在處理異常的語句中來操作。
我推薦的方式:不在catch中改變標記,
還是調用改變標記的方法,然後,跟上interrupt.
st.changeFlag();
t1.interrupt();
這樣,無論線程中,有沒有受阻塞的方法,都會停止線程。
class StopThread implements Runnable
{
private boolean flag=true;
public void run()
{
while(flag)
{
synchronized(this)
{
try
{
wait();
}
catch (Exception e)
{
System.out.println(Thread.currentThread().getName()+"...Exception");
flag=false;
}
}
}
public void changeFlag()
{
flag=false;
}
}
class StopThreadDemo
{
public static void main(String[] args)
{
StopThread st=new StopThread();
Thread t1=new Thread(st);
Thread t2=new Thread(st);
t1.start();
t2.start();
int num=0;
while(true)
{
if(num++==10000)
{
//st.changeFlag();
t1.interrupt();
t2.interrupt();
break;
}
System.out.println(Thread.currentThread().getName()+"....."+num);
}
}
}