篇十一:Java异步处理
学习地址:http://www.cnblogs.com/jevo/archive/2013/04/11/3015023.html
一、java异步处理demo
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; public class MyFutureTask { public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); FutureTask<String> future = new FutureTask<>(new Callable<String>() { public String call() throws Exception{ try { for(int i=1;i<100;i++){ System.out.println("线程:"+i); } return "ok"; } catch (Exception e) { throw new Exception("Callable terminated with Exection!"); } } }); FutureTask<String> future1 = new FutureTask<>(new Callable<String>() { public String call() throws Exception{ try { for(int i=1;i<100;i++){ System.out.println("线程1:"+i); } return "ok"; } catch (Exception e) { throw new Exception("Callable terminated with Exection!"); } } }); FutureTask<String> future2 = new FutureTask<>(new Callable<String>() { public String call() throws Exception{ try { for(int i=1;i<100;i++){ System.out.println("线程2:"+i); } return "ok"; } catch (Exception e) { throw new Exception("Callable terminated with Exection!"); } } }); executor.execute(future); executor.execute(future1); executor.execute(future2); for(int i=1;i<100;i++){ System.out.println("正常秩序:"+i); } try { future.get(); future1.get(); System.out.println(future.isDone()); System.out.println(future1.isDone()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); }finally{ executor.shutdown(); } } }
二、web请求异步处理
import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("test") public class TestController { @RequestMapping("test.do") public @ResponseBody String test(){ System.out.println("测试开始"); ExecutorService executor = Executors.newCachedThreadPool(); FutureTask<String> future = new FutureTask<>(new Callable<String>() { public String call(){ System.out.println("Test Start"); try { Thread.sleep(10000); for(int i=1;i<100;i++){ System.out.println("线程:"+i); } } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Test End"); return "Test OK!"; } }); executor.execute(future); return "OK Nasme"; } }

浙公网安备 33010602011771号