Java tutorial
/** * Copyright (c) 2005-2012 https://github.com/zhangkaitao * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.sishuok.chapter3.web.listener; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.context.request.async.DeferredResult; import org.springframework.web.context.request.async.WebAsyncTask; import java.util.concurrent.Callable; /** * * ?springmvc-config.xmlmvc:deferred-result-interceptors * * <p>User: Zhang Kaitao * <p>Date: 13-7-18 ?9:16 * <p>Version: 1.0 */ @Controller public class ListenerController { @RequestMapping("/listener1") @ResponseBody public DeferredResult<String> listener1() { final DeferredResult<String> result = new DeferredResult<String>(); result.onTimeout(new Runnable() { @Override public void run() { System.out.println("==="); } }); result.onCompletion(new Runnable() { @Override public void run() { System.out.println("===?"); } }); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2 * 1000L); } catch (InterruptedException e) { } System.out.println("DeferredResult?"); result.setResult("success"); } }).start(); return result; } @RequestMapping("/listener2") @ResponseBody public DeferredResult<String> listener2() { final DeferredResult<String> result = new DeferredResult<String>(); result.onTimeout(new Runnable() { @Override public void run() { System.out.println("==="); result.setErrorResult("error"); } }); result.onCompletion(new Runnable() { @Override public void run() { System.out.println("===?"); } }); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(31 * 1000L); } catch (InterruptedException e) { } System.out.println( "DeferredResult????"); result.setResult("success"); } }).start(); return result; } @RequestMapping("/listener3") @ResponseBody public WebAsyncTask<String> listener3() { long timeout = 10L * 1000; // 10 final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() { @Override public String call() throws Exception { Thread.sleep(2L * 1000); return "success"; } }); webAsyncTask.onTimeout(new Callable() { @Override public Object call() throws Exception { System.out.println("===="); return "error"; } }); webAsyncTask.onCompletion(new Runnable() { @Override public void run() { System.out.println("===?"); } }); return webAsyncTask; } @RequestMapping("/listener4") @ResponseBody public WebAsyncTask<String> listener4() { long timeout = 10L * 1000; // 10 final WebAsyncTask webAsyncTask = new WebAsyncTask(timeout, new Callable() { @Override public String call() throws Exception { Thread.sleep(20L * 1000); return "success"; } }); webAsyncTask.onTimeout(new Callable() { @Override public Object call() throws Exception { System.out.println("===="); return "error"; } }); webAsyncTask.onCompletion(new Runnable() { @Override public void run() { System.out.println("===?"); } }); return webAsyncTask; } }