1. 程式人生 > 其它 >Java建立執行緒的幾種方式

Java建立執行緒的幾種方式

技術標籤:Java基礎多執行緒javathread介面

第一種:繼承Thread

首先繼承Thread方法,重寫Thread的run()方法
在main()方法裡建立一個MyThread物件,呼叫該物件的start()方法,start()方法會通過對系統底層的一系列操作,創建出一個相應的執行緒,與當前執行緒併發執行。如果直接呼叫run()方法,程式將執行完run()方法後才會執行main()方法中後面的程式碼,這樣就是單執行緒執行而不是多執行緒併發執行了。

public class MyThread extends Thread {
    @Override
    public void
run() { doSomething(); } private void doSomething(){ System.out.println("Just do it!"); } }
public class Main{
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
    }
}

第二種:實現Runnable介面

使用Runnable介面與繼承Thread類的用法相似

不同的是,實現Runnable介面的類中沒有start()方法,所以要用Thread構造個方法開啟執行緒

public class RunnableThread implements Runnable {
    @Override
    public void run() {
        doSomething();
    }
    private void doSomething(){
        System.out.println("Just do it!");
    }
}
public class Main{
    public static
void main(String[] args) { RunnableThread runnableThread = new RunnableThread(); Thread thread = new Thread(runnableThread); thread.start(); } }

第三種:是實現Callable介面和Future建立執行緒

首先建立Callable介面的實現類CallableThread,實現call()方法,並且有返回值。Callable介面是一個帶泛型的介面,泛型的型別就是執行緒返回值的型別。實現Callable介面中的call()方法,方法的返回型別與泛型的型別相同。

Callable不能直接獲取返回值,需要用FutureTask在外部封裝一下再獲取返回值

public class CallableThread implements Callable<String> {

    @Override
    public String call() throws Exception {
        doSomething();
        return "over";
    }

    private void doSomething(){
        System.out.println("Just do it!");
    }
}
public class Main {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable<String> callable = new CallableThread();//callable不能直接獲取返回值
        FutureTask<String> futureTask = new FutureTask<String>(callable);//需要futureTask封裝一下,獲取返回值
        Thread thread = new Thread(futureTask);
        thread.start();
        doSomething();
        System.out.println(futureTask.get());
    }

    private static void doSomething() {
        System.out.println("main");
    }
}

第四種使用執行緒池建立執行緒

文章連結