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 } }