Spring MVC异步处理-Future模式

Furture模式

Spring MVC异步处理-Future模式_第1张图片
Future模式.png
  • 主线程开启一个子线程,子线程在处理一个非常耗时的任务,主线程就会立即返回一个Future对象。这个Future对象有一个成员变量result,子线程和主线程共享这个Future对象。
  • 如果主线程,在子线程没有处理业务之前调用Future.getResult方法,则会发生阻塞。而子线程处理业务完成之后,会执行Future.setResult方法,此时Future对象的锁属于子线程。子线程执行setResult完毕之后,则会释放锁,同时会通知刚才的等待的主线程。主线程重新获得锁,执行getResult方法。从而获取子线程执行的结果result。
  • 对于Future对象,只是一个代理真实数据的对象。而真实的数据为其成员变量result。子线程负责set真实数据,而主线程负责get真实数据。
  • 在java多线程编程中,使用Callable接口实现任务的执行。
public class TestThread {    
      public static void main(String[] args){        
                  ExecutorService executorService = Executors.newFixedThreadPool(10); 
                  //开启一个子线程,立即返回       
                  Future result = executorService.submit(new CustomTask()); 
                  //主线程阻塞,一直等待子线程返回真实的响应数据   
                  System.out.println(result.getResult());
                  executorService.shutdown();    
      }
}
class CustomTask implements Callable{    
        public String call() throws Exception {        
                 Thread.sleep(10000);        
                 System.out.println(Thread.currentThread());        
                 return "complete task";    
            }
}

你可能感兴趣的:(Spring MVC异步处理-Future模式)