1. 程式人生 > >高併發程式設計-00-建立多執行緒的7種方式

高併發程式設計-00-建立多執行緒的7種方式

1,繼承Thread

主要掌握:執行緒的初始化,啟動,中斷的正確處理方式(interrupted)

public class Demo1 {

    public static void main(String[] args) {

        MyThread thread = new MyThread();

        thread.start();

    }

}

class MyThread extends Thread{

    @Override

    public void run() {

        System.out.println(Thread.currentThread().getName()+":running...");

    }

}

2,實現Runnable

原始碼解析,為什麼會呼叫Runnable的run方法

public class Demo2 {

    public static void main(String[] args) {

        MyRunnable task = new MyRunnable();

        new Thread(task).start();

    }

}

class MyRunnable implements Runnable{

    @Override

    public void run() {

        System.out.println(Thread.currentThread().getName()+":running");

    }

}

3,匿名內部類的方式(執行緒只建立一次的情況)

有兩種方式

public class Demo3 {

    public static void main(String[] args) {

        new Thread(){

            public void run() {

                System.out.println("通過匿名內部類的方式來建立執行緒");

            };

        }.start();

        new Thread(new Runnable() {

            @Override

            public void run() {

                System.out.println("通過實現一個匿名的Runnable子類來實現");

            }

         }).start();

    }

}

給大家留個思考題,如果兩種都兼顧,執行的時候會採用哪種?為什麼?

new Thread(new Runnable() {

    @Override

    public void run() {

        System.out.println("你猜是執行這一段?");

    }

}){

    public void run() {

        System.out.println("還是這一段?");

    };

}.start();

4,帶返回值的執行緒,實現Callable介面

實現call方法

FutureTask對任務進行封裝

5,使用定時器的方式

Timer,TimerTask,執行定時任務

6,使用執行緒池的方式

通過Executors建立不同的執行緒池進行任務執行

7,Lambda表示式(函數語言程式設計)JDK1.8提供的新特

lambda表示式程式碼簡潔,實現方便,對併發支援好,效能高

我們通過列印一個集合的資料來觀察執行結果,發現出來的順序是不一致的,說明是多執行緒方式




期待發布後續課程,就請狂點贊,這樣我才有動力繼續分享偷笑