java吧 关注:1,294,853贴子:12,827,895
  • 9回复贴,共1

问个关于Future的多线程问题哈,业务中遇到的,大神帮我看看。

只看楼主收藏回复

比如说我起了个线程池来分别处理事务,随便写了点伪代码哈。
List<Future<T>> resultList = new ArrayList<>();
taskLists.forEach(task->resultList.add(taskExecutor.submit(()->run(task))));
resultList.forEach(res->System.out.println(res.get(5,TimeUnit.SECONDS)));
然后重点来了,比如说我这个resList里面有20个future,然后所有任务都超时,是会阻塞20*5 100秒吗?


IP属地:中国香港1楼2019-07-23 18:32回复
    自己顶一哈


    IP属地:中国香港来自Android客户端2楼2019-07-23 18:40
    回复
      2026-01-17 03:08:33
      广告
      不感兴趣
      开通SVIP免广告
      下班回家写了个测试加上复习了一下源码,发现虽然.get是阻塞,但是不会影响下一个get继续执行。 此贴终结-----(果然贴吧只能水吗)
      import java.util.ArrayList;
      import java.util.List;
      import java.util.concurrent.*;
      public class test {
      public static void main(String[] args){
      long t1 = System.currentTimeMillis();
      test();
      System.out.println(System.currentTimeMillis()-t1);
      }
      private static void test(){
      ExecutorService pool = Executors.newFixedThreadPool(10);
      List<Future<String>> list= new ArrayList<>();
      for(int i =0;i<10;i++){
      list.add(pool.submit(()->{
      try {
      TimeUnit.SECONDS.sleep(5);
      //System.out.println(Thread.currentThread().getName()+"---");
      return Thread.currentThread().getName()+"---";
      } catch (InterruptedException e) {
      e.printStackTrace();
      }finally {
      return Thread.currentThread().getName()+"---";
      }
      }));
      }
      System.out.println(list);
      list.forEach(a-> {
      try {
      System.out.println(a.get());
      } catch (InterruptedException e) {
      e.printStackTrace();
      } catch (ExecutionException e) {
      e.printStackTrace();
      }
      });
      }
      }
      附上demo,各位不想写notify和wait的,用Future和get方法很舒服哈。


      IP属地:中国香港3楼2019-07-23 20:01
      回复
        一到技术问题这吧里就没人了


        IP属地:广东来自Android客户端5楼2019-07-24 19:06
        回复
          一到技术问题这吧里就没人了


          IP属地:广东来自Android客户端6楼2019-07-24 19:06
          回复
            不会,你不get他也会运行,不然不就是同步的了吗。。。


            IP属地:上海来自Android客户端8楼2019-07-25 08:41
            回复
              我竟然看成了flutter


              IP属地:广东来自iPhone客户端10楼2019-07-25 10:42
              回复
                不同的线程池策略不同


                IP属地:四川来自Android客户端11楼2019-07-25 10:50
                回复
                  2026-01-17 03:02:33
                  广告
                  不感兴趣
                  开通SVIP免广告
                  不会, 最多就5秒.


                  12楼2019-07-25 10:59
                  回复
                    9201年了还用啥future


                    来自Android客户端13楼2019-08-14 23:21
                    回复