java 線程停止的方法

線程停止的方法:

記住一點,線程的停止,

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);

}


}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章