【问题标题】:Storing results of executor.submit to Stringbuffer.append将 executor.submit 的结果存储到 Stringbuffer.append
【发布时间】:2017-08-04 04:37:48
【问题描述】:

我有一个 Executors.newfixedThreadPool() 调用提交,显然提交返回未来包装的 StringBuffer 对象。我需要在响应 StringBuffer 中附加结果。我可以在List<Future<StringBuffer>> 中得到结果,然后再次迭代以追加响应StringBuffer。但我想像下面这样在单次迭代中做到这一点,但它附加了未来的对象。有什么方法可以实现吗?

    ExecutorService es = Executors.newFixedThreadPool(count);
    for (int i = 0; i < count; i++) {
        response.append(es.submit(new Callable<StringBuffer>() {
            @Override
            public StringBuffer call() {
                StringBuffer res = new StringBuffer();
                res = processAddresses(addresses, addressLatch);
                return res;
            }
        }));
    }
    try {
        addressLatch.await();       
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    es.shutdownNow();

【问题讨论】:

  • 您需要保留订单吗?
  • 不一定。但如果我们有订单就好了

标签: java multithreading executorservice


【解决方案1】:

你可以这样做:

    final StringBuffer response = new StringBuffer();
    ExecutorService es = Executors.newFixedThreadPool(count);
    for (int i = 0; i < count; i++) {
        es.submit(new Runnable() {
            @Override
            public void run() {
                StringBuffer res = processAddresses(addresses, addressLatch);
                response.append(res);
            }
        });
    }
    es.shutdownNow();
    try {
        es.awaitTermination(1, TimeUnit.HOURS);
    } catch (InterruptedException ex) {
        LOG.log(Level.SEVERE, null, ex);
    }
    System.out.println(response);

但订单不保证保留

【讨论】:

  • 我必须有一个地址锁。它决定了我要显示多少个地址。每个进程地址都会将锁存器降低 1,假设如果将锁存器降低 24 比将调用 shutdownNow。
  • @upadhyayRakes 好的,你也可以用shutdown代替shutdownNow
  • 但是如果其他线程仍在运行并且我的计数已达到 NUMBER 怎么办。我不再需要处理它们,因为 Latch await 已经结束。我立即关闭,无需等待。
  • @upadhyayRakes 好的,但是没用:关机只会停止接受新任务; il 不会取消已经提交的任务。
  • 正确。但我需要停下来,然后出来。如果我有所有暂停线程的列表(从shutdownNow返回)并且我可以手动终止它们,你能建议我吗?
猜你喜欢
  • 1970-01-01
  • 2019-06-16
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2015-06-11
相关资源
最近更新 更多