【发布时间】:2017-07-06 14:16:57
【问题描述】:
我只是好奇并编写了以下代码。 在运行代码时,控制台显示创建的线程。我注意到创建了大约 32k 个线程。 我的问题是, 为什么我的 Windows 10 操作系统挂起,也无法通过任务管理器强制停止。 既然我的机器有 i7 处理器,为什么操作系统不能在其他进程上运行? 我相信由 java 程序创建的线程必须在其中一个进程中。
我是java初学者。 请让我知道在上述情况下内部发生了什么?
package infiniteThreads;
public class Main {
public static void main(String[] args) {
while(true){
Thread t = new Thread(new Work());
t.start();
}
}
}
package infiniteThreads;
public class Work implements Runnable{
@Override
public void run() {
while(true){
System.out.println("inside " + Thread.currentThread().getName());
}
}
}
【问题讨论】:
-
您有一个 while (true) 循环,它不断创建和启动工作线程...这不是真正的 java 问题,而是编码语法问题,因为这可能出现在任何语言中。
-
“为什么操作系统无法在其他进程上运行?” 如果您的代码没有在所有内核上消耗 100%,那是因为
System.out.println()是synchronized,因此一次只有一个线程可以打印任何内容。这就像 32000 人试图穿过一扇门。他们都在排队等候,或者更确切地说,都围在门口,迫不及待地想要通过。 -
如果它试图变得聪明并且对使用的线程设置限制,我将永远不会再使用 java。这是一个非常好的情况,java 做什么,创建线程并让操作系统决定如何处理它们
标签: java multithreading process