首頁 >Java >java教程 >Java實作非同步呼叫的程式碼範例

Java實作非同步呼叫的程式碼範例

不言
不言轉載
2019-03-07 17:15:392677瀏覽

這篇文章帶給大家的內容是關於Java實作非同步呼叫的程式碼範例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

首先我遇到的問題是介面呼叫時需要更新快取而更新快取又是個說快不快的過程所以打算做異步呼叫返回我所需要的結果即可,至於快取什麼時候更新完就不是我所需要關注的了

廢話不多說上代碼

public class MyExecutor {
    private ExecutorService executor = Executors.newCachedThreadPool() ;
    public void fun() throws Exception {
        executor.submit(new Runnable(){
            @override
                public void run() {
                    try {
                        //要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试
                        Thread.sleep(10000);
                        System.out.print("睡够啦~");
                    }catch(Exception e) {
                        throw new RuntimeException("报错啦!!");
                    }
                }
        });
    }
}
public class Demo{
    
    public static void main(String[] args) {
        
         MyExecutor  myExecutor = new MyExecutor();
         try {
            myExecutor.fun();
            System.our.print("你先睡着,我先回家啦~");
        }catch(Exception e) {
             throw new RuntimeException("业务程序报错啦!!");
        }
    }
}

好啦代碼到此結束(ps:純手打若有錯請見諒) 

#跑主方法 

會先印出(你先睡著,我先回家啦~)

然後(睡夠啦~)

##也就是說在需要非同步執行的方法未執行完畢時主程式已經回傳結果了  不需要繼續等待這樣可以保證程式先回傳結果再繼續執行不需要等待的繁瑣的任務  當然也可以加一些方法去判斷非同步方法是否執行完畢。

說一下Executors類別

這個類別是用來建立執行緒池的

有這麼多方法

1、newFixedThreadPool() 建立固定大小的線程池線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執行異常而結束,那麼線程池會補充一個新線程

2、newCachedThreadPool() 創建一個可緩存的線程池,如果線程池的大小超過了處理任務所需的線程,那麼就會回收部分空閒(60s不執行任務)的線程,當任務數量增加時,此線程池又可以智能的添加新線程來處理任務。此執行緒池不會對執行緒池大小做限制,執行緒池大小完全依賴系統(JVM)能夠建立的最大執行緒大小

3、newSingleThreadExecutor() 建立一個單執行緒的執行緒池。這個執行緒池只有執行緒在工作,也就是相當於單執行緒串列執行所有任務。如果這個唯一的執行緒因為異常結束,那麼會有一個新的執行緒來取代它。此執行緒池保證所有任務的執行順序按照任務的提交順序執行

4、newScheduledThreadPool() 建立一個大小無限的執行緒池,此執行緒池支援定時以及週期性執行任務的需求

5、newSingleThreadScheduledExecutor() 建立一個單執行緒的執行緒池。此線程池支援定時以及週期性執行任務的需求


以上是Java實作非同步呼叫的程式碼範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除