作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
假设我们有一个线程数有限的线程池。
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/
我是一名优秀的程序员,十分优秀!