1. 程式人生 > >java多執行緒程式設計歷史演變【截止到jdk8】

java多執行緒程式設計歷史演變【截止到jdk8】

最近看了咕泡學視訊教程,這裡算是做一個記錄。

一、JDK1.5之前時代

建立執行緒的方式

繼承thread

package study.java5;

/**
 * @Auther: zhw
 * @Date: 2018/10/28 11:16
 * @Description: 1.5多執行緒方式1
 */
public class ThreadDemo {

    public static void main(String[] args) {

        Demo1 demo1 = new Demo1();

        demo1.start();
    }

}


class Demo1 extends Thread
{
    @Override
    public void run() {
        System.out.println("執行緒開始執行");
    }
}

實現Runnable介面

package study.java5;

/**
 * @Auther: zhw
 * @Date: 2018/10/28 12:29
 * @Description: //TODO
 */
public class RunnableDemo {

    public static void main(String[] args) {

        Demo2 demo2 =new Demo2();

        Thread thread = new Thread(demo2);

        thread.start();
    }

}


class Demo2 implements Runnable{

    @Override
    public void run() {
        System.out.println("執行緒開始執行");
    }
}

1.5總結:

1、缺少執行緒池的管理 2、想獲取執行緒執行的結果非常麻煩

二、JDK1.5時代

2.1、Executors

這個可以算是執行緒的管理,其中包含各種執行緒服務 ExecutorService:最常見的執行者。生命週期 ScheduledExecutorService:帶有任務排程的執行者 ThreadFactory:執行緒工廠,用於建立新執行緒

2.2、ExecutorService執行緒服務

public class ExecutorsExecutorService {

    public static void main(String[] args) {

        ExecutorService executorService = Executors.newFixedThreadPool(2);

        Future<String> future = executorService.submit(new Callable<String>(){

            @Override
            public String call() throws Exception {
                return "first executorService";
            }
        });

        //do other thing

        String result = "";
        try {
            result = future.get();
        }catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(result);
    }
}

如上面例子,建立了一個數量為2的執行緒池,返回了ExecutorServie,ExecutorServie呼叫了submit方法產生了一個Future結果. 區分Callable和Future

Callable:是源頭,是任務,是產生結果的。 Future:Future是用於獲取結果的。由於Callable的呼叫是非同步的,也就是說結果不知道什麼時候產生,也就是這個單詞的意思“未來”,這是個未來結果。

詳解Future

  1. get:這個方法會一直等待結果的完成,然後獲取結果,這個方法還支援等待的最大時間,超過這個時間就不繼續等待。
  2. isDone:判斷結果是否完成
  3. cancel:取消任務,未開始或已完成返回false,引數表示是否中斷執行中的執行緒 更詳細的描述
  4. isCancelled:是否取消了。