java創建執行緒的三種方式

  • 2019 年 12 月 7 日
  • 筆記

import java.util.concurrent.Callable;  import java.util.concurrent.ExecutionException;  import java.util.concurrent.FutureTask;    public class NewThreadDemo {        public static void main(String[] args) throws InterruptedException, ExecutionException {          //第一種方式          Thread t1 = new Thread(){                @Override              public void run() {                  System.out.println("new Thread 1");//輸出:new Thread 1              }          };//創建執行緒            t1.start();//啟動執行緒          System.out.println(t1.getName());//輸出:Thread-0            //第二種方式          Thread t2 = new Thread(new Runnable() {                @Override              public void run() {                  System.out.println("new Thread 2");//輸出:new Thread 2              }          });            t2.start();            System.out.println(Thread.currentThread().getName());//輸出:main              //第三種方式          FutureTask<String> ft = new FutureTask<String>(new Callable<String>() {                @Override              public String call() throws Exception {                  System.out.println("new Thread 3");//輸出:new Thread 3                  return "aaaa";              }          });            Thread t3 = new Thread(ft);          t3.start();          String result = ft.get();          System.out.println(result);//輸出:aaaa        }  }

首先要明白什麼是執行緒? 明白執行緒之前要明白什麼是進程? 進程是什麼呢?  進程是電腦中運行的一個應用程式. 執行緒:執行該進程的邏輯單元.  執行緒是用來執行進程的. Java中萬物皆對象,執行緒也被描述成了一個對象就是Thread對象. Java對多執行緒的支援也是特別完善的,特別是JDK1.5之後. 首先明白什麼是執行緒? 什麼是進程? 進程就是電腦中運行的一個應用程式.    執行緒就是執行該進程的邏輯單元. 執行緒管理:          創建執行緒的方式:                    1.繼承Thread類,並複寫run方法,創建該類對象,調用start方法開啟執行緒。                    2.實現Runnable介面,複寫run方法,創建Thread類對象,將Runnable子類對象傳遞給Thread類對象。調用start方法開啟執行緒。                    第二種方式好,將執行緒對象和執行緒任務對象分離開。降低了耦合性,利於維護                    3.創建FutureTask對象,創建Callable子類對象,複寫call(相當於run)方法,將其傳遞給FutureTask對象(相當於一個Runnable)。                    創建Thread類對象,將FutureTask對象傳遞給Thread對象。調用start方法開啟執行緒。這種方式可以獲得執行緒執行完之後的返回值。

第三種使用Runnable功能更加強大的一個子類.這個子類是具有返回值類型的任務方法. 第一種和第二種兩種方式是run()方法運行完是沒有返回值的. 執行緒的資訊: 

public class ThreadInfo {      public static void main(String[] args) {          Thread t1 = new Thread(new Runnable() {                @Override              public void run() {                  synchronized (ThreadInfo.class) {                      System.out.println("Thread");                  }              }          });            t1.start();            System.out.println(t1.getId());          System.out.println(t1.getName());          System.out.println(t1.getPriority());//優先順序 1-10          System.out.println(t1.getState());//執行緒狀態: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED      }  }