gpt4 book ai didi

java - 线程在线程池中 hibernate

转载 作者:搜寻专家 更新时间:2023-11-01 03:45:54 25 4
gpt4 key购买 nike

假设我们有一个线程数有限的线程池。

Executor executor = Executors.newFixedThreadPool(3);

现在假设其中一个 Activity 任务必须 hibernate 3 秒(无论出于何种原因)。

executor.execute(() -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException ignore) {}
});

我们如何实现这样一个线程池,当一个任务 hibernate (或 waits 在监视器/condition 上)时,线程1 可以有效地用于运行另一个任务吗?

1 thread 我不是指“物理”Java 线程,因为在线程 hibernate 时这是不可能的。我的意思是,线程池有一个抽象实现,它实际上似乎允许一个线程在 hibernate 期间运行另一个任务。关键是总是有 N 个同时运行的(非 hibernate )任务。

有点类似于监视器处理对临界区的访问的方式:

  • 如果一个线程等待资源,则该资源可以被另一个线程使用。
  • 如果线程收到通知,它会被放入等待集中以(重新)获得对该资源的访问权。

最佳答案

您所要求的实质上是在 JVM/OS 线程之上实现协程/纤程。 Sanhong Li 发表了精彩的演讲关于阿里巴巴的工程师如何实现这种构造的方式——这个想法是,而不是依赖操作系统线程调度器,你需要依赖你自己的选择器。

另见 Loom project用于光纤(用户态绿色线程)。

关于java - 线程在线程池中 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55285366/

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