關於異步目前比較經典以及經常使用的實現方式就是消息隊列:在不使用消息隊列服務器的時候,用戶的請求數據直接寫入數據庫,在高併發的狀況下數據庫壓力劇增,使得響應速度變慢。可是在使用消息隊列以後,用戶的請求數據發送給消息隊列以後當即 返回,再由消息隊列的消費者進程從消息隊列中獲取數據,異步寫入數據庫。因爲消息隊列服務器處理速度快於數據庫(消息隊列也比數據庫有更好的伸縮性),所以響應速度獲得大幅改善!數據庫
前兩種實際上不多用,通常都是使用線程池的方式比較多一點,這個很好想,不可能來一個請求就new一個線程,無端的資源開銷。bash
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方法。併發
相比於第一種方式,更推薦使用這種,由於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!高併發