java線程學習3——線程的停止
方法一 stop方法
Thread t = new Thread(new MyThread());
t.stop();
非常不友好,該方法已經被廢棄。使用該方法,線程直接停止,可能很多資源沒有關閉,還有可能造成死鎖。
方法二 interrupt方法
public class SleepThread implements Runnable
{
/**
* 線程運行時執行的方法
*/
public void run()
{
try
{
// 該線程進入阻塞狀態5秒
Thread.sleep(5000);
for (int i = 0; i < 500; i++)
{
System.out.println(Thread.currentThread().getName() + i);
}
}
catch (InterruptedException e)
{
// 若調用該線程的interrupt方法,會報該異常,真實程序中可以關閉一些資源
e.printStackTrace();
}
}
}
package cn.xy.Thread;
public class SleepTest
{
public static void main(String[] args)
{
SleepThread tr = new SleepThread();
Thread t = new Thread(tr);
t.start();
for (int i = 0; i < 500; i++)
{
System.out.println(Thread.currentThread().getName() + i);
}
t.interrupt();
}
}
若調用該線程的interrupt方法,會報InterruptedException異常,真實程序中可以捕捉該異常並關閉一些資源。
方法三 flag
public class StopThread implements Runnable
{
private boolean flag = true;
public void run()
{
while (flag)
{
// flag變為false後可能會完成該線程的最後一次輸出
System.out.println(Thread.currentThread().getName());
}
}
public void shutDown()
{
System.out.println("我被shutdown了!");
flag = false;
}
}
public class StopTest
{
public static void main(String[] args)
{
StopThread st = new StopThread();
Thread t = new Thread(st);
t.start();
for (int i = 0; i < 10; i++)
{
System.out.println(Thread.currentThread().getName() + i);
}
System.out.println("主線程結束!");
st.shutDown();
}
}
可以很靈活控製線程的結束,shutDown中可以關閉資源。
最後更新:2017-04-04 07:32:06