1. 程式人生 > >Java 請求非同步響應

Java 請求非同步響應

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/lv_hang515888/article/details/79005176

背景:介面請求的時候如果是同步,那麼有時業務邏輯處理時間很長,請求就會超時! 所以需要在介面請求過來時,就先響應,再去執行業務邏輯。(或者不是一個請求,一個方法裡面兩個無關的業務邏輯需要非同步執行節省效率的也可以用這個方法,程式碼自己看著改,前提是執行緒裡面執行的方法沒有關係不會影響響應的結果)

1.建立一個Controller類用來接收介面請求

@RestController
@RequestMapping("/test")
public class Controller {

//建立執行緒池,這個執行緒池型別可以自己定
private static ScheduledExecutorService executor = Executors.newScheduledThreadPool(5)

    @RequestMapping(value="init",method = RequestMethod.POST)
    public AjaxResult init(@RequestBody String json){
        AjaxResult result = new AjaxResult();
        //方法加入到執行緒池中去執行
        executor.execute(new ToServer(json)));
        //返回響應結果
        result.setRetcode(0);
        result.setRetmsg("成功");
        return result;
    }
}

2.再建執行緒類 

public class ToServer extends Thread {
    private String json;
    //需要什麼引數就自己定義
    public ToServer(String json) {
        this.json = json;
    }
     /**
     * 執行定時請求
     */
    @Override
    public void run() {
         // 把run方法裡的內容換成你要執行的內容              
         service.doService(json);      
    }
}