gpt4 book ai didi

Java多线程 - 一个线程在另一个线程之前两次进入临界区

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:30 24 4
gpt4 key购买 nike

我有一个关键代码,包装在 synchronized (this) {} 中。

在日志中,我看到线程 #1 进入临界区,然后线程 #2 到达那里,等待,然后,线程 #1 离开临界区,并再次进入(2 毫秒后)!甚至在另一个线程进入之前。

这怎么可能?线程 #2 不应该进入临界区吗?

编辑:

添加我类(class)的一部分...

@Service
public class RequestService {

Logger logger = LoggerFactory.getLogger(RequestService.class);

public HttpResponse executeRequest(HttpClient httpClient, HttpGet request) throws IOException, InterruptedException {
logger.info("About to enter critical code");
synchronized (this) {
logger.info("executing http request");
HttpResponse response = httpClient.execute(request);
logger.info("got http response");
return response;
}
}
}

最佳答案

您可以使用 ReentrantLock如果你想引入公平,

Lock lock = new ReentrantLock(true);

等待进入临界区的线程将以“公平”的顺序进入,按照它们排队的顺序。

默认的公平策略是“不公平”的,因为公平会带来大多数应用程序不需要的性能开销。

关于Java多线程 - 一个线程在另一个线程之前两次进入临界区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35782933/

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