gpt4 book ai didi

java - 这些线程在哪个对象上同步

转载 作者:行者123 更新时间:2023-12-01 13:12:12 26 4
gpt4 key购买 nike

我想同步通过 ExecutorService 调用的 3 个线程。如何确保它们在同一对象上同步?

现在我有这个代码:

class Test { 
executor.submit(new Request(threadNames[i]));
executor.submit(new Request(threadNames[i]));
executor.submit(new Request(threadNames[i]));

private class Request implements Callable {
@Override
public Long call() throws InterruptedException {
if (threadName.equals("SOMETHING") {
doSomething();
} else {
doSomeOtherThing();
}
}
}

private synchronized void doSomething() {
}

private synchronized void doSomeOtherThing() {
}

...
}

其中一个线程负责生成条件,另外 2 个线程对其执行操作。

最佳答案

  1. 您无法向 Executor 服务提交线程;您提交任务,这些任务将在稍后某个时刻在执行器线程池中的线程之一上执行;

  2. 如果一个任务是生产者,另外两个任务是消费者,那么将所有三个任务提交给执行器是错误的。它很容易导致死锁,即消费者任务无限期地等待生产者,但生产者无法运行,因为消费者占用了所有线程。

重新考虑你的解决方案,让生产者任务也负责将消费者任务提交给执行者;任务可以用产生的值来实例化,因此协调问题从一开始就解决了。

关于java - 这些线程在哪个对象上同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22759934/

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