閱讀69 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go jdk1.5新特性5之枚舉之枚舉類型的應用
  下一篇:go Java中String類型的不可變性和駐留池