本文講述了在Java中如何創建和結束線程的最基本方法,只針對于Java初學者。一些高級知識如線程同步、調度、線程池等內容將會在后續章節中逐步深入。
創建線程
創建普通線程有兩種方式,繼承Thread類或實現Runnable接口。示例如下。
方法1:繼承Thread類
創建方法示例:
1
2
3
4
5
6
7
8
|
public class MyThread1 extends Thread { @Override public void run() { //TODO Auto-generated method stub super .run(); System.out.println( "Execute thread:MyThread1" ); } } |
方法2:實現Runnable接口
創建方法示例:
1
2
3
4
5
6
7
|
public class MyRunnable1 implements Runnable { @Override public void run() { //TODO Auto-generated method stub System.out.println( "Execute thread:MyRunnable1" ); } } |
運行線程
針對上述兩種方法,調用線程開始運行的方法分別如下。
方式示例1:new MyThread1().start();
方法示例2:new Thread(new MyRunnable1()).start();
停止線程
請不要采取已經過時(deprecated)的java.lang.Thread.stop方法,不論你因為何種原因需要暫?;蛲耆Y束當前正在運行的線程。
常見的退出線程的方法如下。
方式1:線程自動退出
線程執行完畢,自動退出。例如網絡下載線程,當后臺下載完后,線程自動退出。
方法2:使用interrupt主動退出
在主線程中,調用線程對象的interrupt()方法,設置線程狀態。
1
2
3
4
5
6
7
8
|
final Thread t = new MyThread2(); t.start(); try { Thread.sleep( 500 ); } catch (InterruptedException e) { e.printStackTrace(); } t.interrupt(); |
在子線程中,調用isInterrupted()方法判斷線程狀態。如果返回true,則可以結束線程運行。如下示例代碼,在線程中有一個while循環,每次循環都會判斷線程狀態,如果為true,則停止循環,退出線程。
1
2
3
4
5
6
7
8
9
10
11
12
|
public class MyThread2 extends Thread { @Override public void run() { super .run(); while ( true ) { // Cancel thread when call interrupt() method if (Thread.currentThread().isInterrupted()) { break ; } } } } |
在主線程中調用interrupt設置狀態,在子線程中通過isInterrupted獲取狀態,是最好的結束線程的方法。注意主線程中一旦調用interrupt,子線程中相關的sleep, wait方法在執行時會拋出InterruptedException異常,此時也可以通過捕獲這種異常來結束線程。
方式3:使用預設標志主動退出
預設一個退出標志,通過判斷標志的值結束線程運行。這種情況常見于循環執行中的任務。在每次循環時,判斷標志值。如下示例,在線程while循環中判斷mCancelFlag標志。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class MyThread3 extends Thread { private boolean mCancelFlag; @Override public void run() { super .run(); System.out.println( "Thread start" ); while (mCancelFlag) { // Cancel thread when call interrupt() method break ; } System.out.println( "Thread over" ); } public void cancelThread() { mCancelFlag = true ; } } |
當主線程希望主動結束線程時,調用線程的cancelThread方法設置mCancelFlag即可。
1
2
3
4
5
6
7
8
9
|
final MyThread3 t = new MyThread3(); t.start(); try { Thread.sleep( 500 ); } catch (InterruptedException e) { e.printStackTrace(); } // stop thread t.cancelThread(); |
如果在線程執行時,需要主動退出線程,最佳的方式為方法2。用戶根據實際情況,例如更多的狀態控制,也可以使用方法3。
一句話總結
創建線程:繼承Thread類或實現Runnable接口。
結束線程:調用interrupt方法。
總結
以上就是本文關于Java創建與結束線程代碼示例的全部內容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
原文鏈接:http://blog.csdn.net/light_vs_shadow/article/details/54292809