1. 程式人生 > 實用技巧 >執行緒的三種建立方式

執行緒的三種建立方式

1. 繼承Thread類
(1)定義Thread類的子類,並重寫run()方法。
(2)建立Thread子類的例項,即建立執行緒物件。
(3)通過呼叫執行緒物件的start()方法啟動該執行緒。

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread子類MyThread的執行緒號:" + currentThread().getName());
    }
}

public class Demo {
    public static void main(String[] args) throws Exception {
        test();
    }

    public static void test() throws Exception {
        Thread t1 = new MyThread();
        Thread t2 = new MyThread();
        t1.start();
        t2.start();
    }
}

2. 實現Runnable介面(常用)
(1)定義Runnable介面的實現類。
(2)建立Runnable的實現類例項,將此例項作為Thread的target來建立Thread物件。
(3)通過呼叫執行緒物件的start()方法啟動該執行緒。

class MyThreadImpl implements Runnable {
    @Override
    public void run() {
        System.out.println("實現Runnable介面的執行緒號:" + Thread.currentThread().getName());
    }
}
public class Demo {
    public static void main(String[] args) throws Exception {
         test();
    }

    public static void test() throws Exception {
       MyThreadImpl mti = new MyThreadImpl();
        Thread t1 = new Thread(mti);
        t1.start();
    }
}

3.實現Callable介面
(1)定義Callable介面的實現類,並實現call()方法,call()方法有返回值。
(2)建立Callable實現類的例項,使用FutureTask類來包裝Callable物件,該FutureTask物件封裝了該Callable物件的call()方法的返回值。
(3)將FutureTask物件作為Thread物件的target建立執行緒物件,呼叫start()啟動新執行緒。
(4)呼叫FutureTask物件的get()方法來獲得子執行緒執行結束後的返回值。

class MyThreadCallable implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println("實現Callable介面的執行緒號:" + Thread.currentThread().getName());
        return 10;
    }
}
public class Demo {
    public static void main(String[] args) throws Exception {
         test();
    }
    public static void test() throws Exception {
        Callable callable = new MyThreadCallable();
        FutureTask ft = new FutureTask(callable);
        Thread t = new Thread(ft);
        t.start();
        System.out.println(ft.get());   
   }
}