如何應用多線程

在 Java 中,有多種方式來實現多線程。繼承 Thread 類、實現 Runnable 接java

口、使用 ExecutorService、Callable、Future 實現帶返回結果的多線程。多線程

繼承Thread ide

Thread 類本質上是實現了 Runnable 接口的一個實例,表明一個線程的實例。spa

啓動線程的惟一方法就是經過 Thread 類的 start()實例方法。start()方法是一個線程

native 方法,它會啓動一個新線程,並執行 run()方法。這種方式實現多線程很orm

簡單,經過本身的類直接 extend Thread,並複寫 run()方法,就能夠啓動新線繼承

程並執行本身定義的 run()方法。接口


/**
 * @auther: tianweichang
 * @date: 2018/8/28 20
 * @Description: 繼承Thread
 */
public class MyThread extends Thread {
public void run() {
        System.out.println("MyThread.run()");
    }

public static void main(String[] args) {
        MyThread myThread1 = new MyThread();
        MyThread myThread2 = new MyThread();
        myThread1.start();
        myThread2.start();
    }
}

實現Runnable ip

java單線程的問題,若是本身的類已經 extends 另外一個類,就沒法直接 extends Thread,此時,能夠實現一個 Runnable 接口ci



實現Callable接口經過FutureTask包裝器來建立

Thread  線程

有的時候,咱們可能須要讓一步執行的線程在執行完成之後,提供一個返回值

給到當前的主線程,主線程須要依賴這個值進行後續的邏輯處理,那麼這個時

候,就須要用到帶返回值的線程了。Java 中提供了這樣的實現方式

/**
 * @auther: tianweichang
 * @date: 2018/8/28 20
 * @Description: 實現Callable建立線程
 */
public class MyCallable implements Callable<String> {
public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        MyCallable callableDemo = new MyCallable();
        Future<String> future = executorService.submit(callableDemo);
        System.out.println("返回值:" + future.get());//get是阻塞的
        executorService.shutdown();
    }

@Override
    public String call() throws Exception {
//do your business
        int a = 1;
        int b = 2;
        System.out.println(a + b);
        return "執行結果:" + (a + b);
    }
}
相關文章
相關標籤/搜索