gpt4 book ai didi

Java Future.get() 不返回

转载 作者:行者123 更新时间:2023-11-30 04:59:43 24 4
gpt4 key购买 nike

来自下面的代码或 ValueMutationEventHandler ,为什么我不能执行 future2.get(),等待 future2 完成然后获取结果?

如果我执行 future2.get(),它将永远等待。

    import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeoutException;

import junit.framework.Assert;

import org.junit.Test;

import com.lmax.disruptor.BatchEventProcessor;
import com.lmax.disruptor.ClaimStrategy;
import com.lmax.disruptor.RingBuffer;
import com.lmax.disruptor.WaitStrategy;

int numPublisher = 1;
int numConsumer = 1;
int parties = numPublisher + numConsumer;
CyclicBarrier barrier = new CyclicBarrier(parties);

RingBuffer<ValueEvent> ringBuffer = new RingBuffer<ValueEvent>(
ValueEvent.EVENT_FACTORY, 8192,
ClaimStrategy.Option.MULTI_THREADED,
WaitStrategy.Option.YIELDING
);

int iteration = 10;
ValuePublisher valuePublisher = new ValuePublisher(
barrier, ringBuffer, iteration
);

ExecutorService execService = Executors.newFixedThreadPool(2);
Future future = execService.submit(valuePublisher);

ValueMutationEventHandler eventHandler = new ValueMutationEventHandler(Operation.ADDITION);

BatchEventProcessor<ValueEvent> eventProcessor = new BatchEventProcessor<ValueEvent>(ringBuffer,
ringBuffer.newDependencyBarrier(),
eventHandler
);

barrier.await();
Future future2 = execService.submit(eventProcessor);

//////////////////////////////
// Why do I need sleep here? Why doesn't future2.get works?
/////////////////////////////
Thread.sleep(1000);

Assert.assertEquals(eventHandler.getValue(), 45L );

最佳答案

您可以使用get(long timeout, TimeUnit unit)以避免长时间等待并使操作超时。

使用上面而不是 Thread.sleep(1000); ,你不需要 Thread.sleep(int)

如果 Future.get 没有返回,您可能需要检查 BatchEventProcessor 来查看其中发生了什么。如果它不返回任何内容,Future.get 也无法返回任何内容。将调试点放入 BatchEventProcessor 中,以确保它确实在您需要的预期时间范围内返回结果。

关于Java Future.get() 不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com