java - 我应该在虚拟机中使用多少个线程?

标签 java linux multithreading

在我们的项目中,我创建了很多 Java 线程来完成一些连续的工作。

大多数时候这些线程都处于 hibernate 状态,因此总 CPU 成本较低。

1168线程,system overload应低于 0.20

但后来我注意到,如果我用jvm创建超过1000个线程,那么我会得到

fork: retry: Resource temporarily unavailable

当我想连接时vm (我的意思是 VM ,而不是 jvm )通过 ssh ,这似乎是一个关于系统资源的严重问题..

我非常担心我的程序中会发生什么..

最佳答案

这么多线程看起来并不是一个好的设计。我建议在一个循环中接收当前唤醒线程的所有事件,这些事件可以立即将它们转换为 Future s 或 Runnables 并发布到一些 ExecutorService 。该服务可以为您管理线程池。 ServerSocket 和 Socket 的标准方法基本上就是这样实现的。

关于java - 我应该在虚拟机中使用多少个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14539022/

相关文章:

c++ - 使用 cudaSetDeviceFlags 的正确位置?

c# - 在 C# 中设置的简单属性的非线程安全是什么?

java - 如何在 RecyclerView Scroll 上下载更多 Firebase 对象?

java - JDBC中如何获取插入ID?

c - 将进程置于前台

c - 厕所 : standard input: Bad file descriptor on fork + pipe + execlp

c# - ping 大量 IP 地址的最快方法?

java - hibernate 中事务中的惰性更新会产生问题

java - java中非静态方法如何访问静态成员?

linux - 使用 scp 命令复制文件/文件夹