啟動線程的五種方式
public static void main(String[] args) { new MyThread().start(); //第一種 直接通過Thread MyThread 是繼承了Thread對象的類 實現在下面
new Thread(new MyRun()).start(); //第二種 Runnable new Thread(()->{ //第三種 lambda System.out.println("Hello Lambda!"); }).start(); Thread t = new Thread(new FutureTask<String>(new MyCall())); //第四種 t.start(); ExecutorService service = Executors.newCachedThreadPool(); //第五種 使用Executor service.execute(()->{ System.out.println("Hello ThreadPool"); }); service.shutdown(); } }
public class T02_HowToCreateThread { static class MyThread extends Thread { @Override public void run() { System.out.println("Hello MyThread!"); } } static class MyRun implements Runnable { @Override public void run() { System.out.println("Hello MyRun!"); } } static class MyCall implements Callable<String> { @Override public String call() { System.out.println("Hello MyCall"); return "success"; } }
中斷線程的方法
當線程的run方法執行方法體中的最后一條語句后,並經由執行return語句返回時,或者出現了在方法中沒有捕獲的異常時,線程將終止。
沒有可以強制線程終止的方法。然而,interrupt方法可以用來請求終止線程。
Java早期版本中,還有一個stop方法,其他線程可以調用它終止線程。但是這個方法已經被棄用了。
線程狀態
線程可以有如下6種狀態:
- New (新創建)
- Runnable (可運行)
- Blocked (被阻塞)
- Waiting (等待)
- Timed waiting (計時等待)
- Terminated (被終止)
要確定一個線程的當前狀態,可調用getState方法