首页 > 其他 > 详细

FutureTask demo

时间:2019-05-17 14:18:59      阅读:135      评论:0      收藏:0      [点我收藏+]

 public class MutilThreadTest {

/**
     * 方式一:callable  有返回值
     * @param bb
     * @return
     * @throws Exception
     */
//    @Async
     public Callable<String>  testCallable1(String bb) throws Exception{
         
         Callable<String>  result=  new Callable<String>() {

            @Override
            public String call() throws Exception {
                
                System.err.println("线程一启动了");
                
                System.err.println("线程一启动了");
                
                System.err.println("线程一启动了");
                Thread.sleep(4000);
                return bb;
            }};
         
            
            return result;
     }
    
     
//@Async     
public Callable<String>  testCallable2(String aa) throws Exception{
         
         Callable<String>  result=  new Callable<String>() {

            @Override
            public String call() throws Exception {
                
                Thread.sleep(5000);
                System.err.println("线程2启动了");
                System.err.println("线程2启动了");
                System.err.println("线程2启动了");
                return aa;
            }};
         
            
            return result;
     }
     


@Test
//public FutureTask<String> testFutureTask() throws Exception {
    public void testFutureTask() throws Exception {
    
    long start = System.currentTimeMillis();
//    Thread.sleep(3000);
    FutureTask<String> futureTask1 = new FutureTask<String>(testCallable1("xain11111"));// 将Callable写的任务封装到一个由执行者调度的FutureTask对象  
    FutureTask<String> futureTask2 = new FutureTask<String>(testCallable2("xain2222"));  

    ExecutorService executor = Executors.newFixedThreadPool(2);        // 创建线程池并返回ExecutorService实例  
    executor.execute(futureTask1);  // 执行任务  
    executor.execute(futureTask2);
    System.err.println("total cost time is :" +(System.currentTimeMillis()-start));
//    System.err.println(futureTask1.get());
//    System.err.println(futureTask2.get());
//    boolean done = futureTask1.isDone();
//    boolean done1 = futureTask2.isDone();
//    System.err.println(done);
//    System.err.println(done1);
//    executor.shutdown();                          // 关闭线程池和服务   
//    Thread.currentThread().join();
//    return;
    
  while (true) {//等待所有任务都执行结束
        boolean done = futureTask1.isDone();
        boolean done1 = futureTask2.isDone();
        if(done&&done1){
            System.err.println("total cost time is11 :" +(System.currentTimeMillis()-start));
            System.err.println(futureTask1.get());
            System.err.println(futureTask2.get());
            break;
            }
        }
    
}
}

 

FutureTask demo

原文:https://www.cnblogs.com/lshan/p/10880862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!