Java多線程入門

1.什麼是併發?什麼是並行?併發和並行有什麼區別?

多個線程在同時運行(並行)或者交替運行(併發)。單核CPU:多個線程搶佔這一個CPU資源,誰搶到誰運行,即交替運行(併發);多核CPU:例如n核CPU就能夠有n個線程同時運行(並行),當有n+1個線程時,有一個核就存在併發。由此可知並行裏面有併發。

2.同步和異步

同步和異步一般用來形容一次方法的調用。同步方法調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行爲,期間等待的過程就是線程阻塞。異步方法調用更像一個消息傳遞,一旦開始,方法調用會當即返回,調用者能夠後續操做,舉個消息隊列的例子。

關於異步目前比較經典以及經常使用的實現方式就是消息隊列:在不使用消息隊列服務器的時候,用戶的請求數據直接寫入數據庫,在高併發的狀況下數據庫壓力劇增,使得響應速度變慢。可是在使用消息隊列以後,用戶的請求數據發送給消息隊列以後當即 返回,再由消息隊列的消費者進程從消息隊列中獲取數據,異步寫入數據庫。因爲消息隊列服務器處理速度快於數據庫(消息隊列也比數據庫有更好的伸縮性),所以響應速度獲得大幅改善!數據庫

3.使用多線程常見的幾種方式

前兩種實際上不多用,通常都是使用線程池的方式比較多一點,這個很好想,不可能來一個請求就new一個線程,無端的資源開銷。bash

3.1 繼承Thread類

public class Test {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
        System.out.println("運行結束!");
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        super.run();
        System.out.println("Thread create by extends Thread!");
    }
}
複製代碼

運行結果:

運行結束!服務器

Thread create by extends Thread!多線程

從上面結果能夠看出:main方法是主線程,MyThread是新開闢的線程,是一個子任務,CPU以不肯定的方式,或者所是以隨機的時間來調用線程中的run方法。併發

3.2 實現Runnable接口

相比於第一種方式,更推薦使用這種,由於Java是單繼承可是能夠多實現。異步

public class CreateThreadByImplements {
    public static void main(String[] args) {
        MyRunnable runnable = new MyRunnable();
        Thread thread = new Thread(runnable);
        thread.start();
        System.out.println("運行結束!");
    }
}

class MyRunnable implements Runnable {

    @Override
    public void run() {
        System.out.println("Thread create by implements Runnable!");
    }
}
複製代碼

運行結果:

運行結束!ide

Thread create by implements Runnable!高併發

相關文章
相關標籤/搜索