为什么操作系统要创建无限java线程

为什么操作系统要创建无限java线程,java,multithreading,process,Java,Multithreading,Process,我只是好奇,写了下面的代码。 在运行代码时,控制台显示创建的线程。我注意到创建了大约32k个线程。 我的问题是,, 为什么我的windows 10操作系统挂起,也无法使用任务管理器强制停止。 既然我的机器有i7处理器,为什么操作系统不能在其他进程上运行呢? 我相信java程序创建的线程一定在其中一个进程中 我是java的初学者。 请让我知道在上述情况下内部会发生什么 就java而言,它将消耗系统上所有可用的处理器和CPU线程。但是您在这里的实验中遇到的限制是操作系统级别的限制,大约是句柄可以

我只是好奇,写了下面的代码。 在运行代码时,控制台显示创建的线程。我注意到创建了大约32k个线程。 我的问题是,, 为什么我的windows 10操作系统挂起,也无法使用任务管理器强制停止。 既然我的机器有i7处理器,为什么操作系统不能在其他进程上运行呢? 我相信java程序创建的线程一定在其中一个进程中

我是java的初学者。 请让我知道在上述情况下内部会发生什么




就java而言,它将消耗系统上所有可用的处理器和CPU线程。但是您在这里的实验中遇到的限制是操作系统级别的限制,大约是句柄可以阅读更多关于它的信息


也许你可以尝试在你的系统设置中摆弄一些东西,试图从你的实验中获得更多的见解。你可以试试这个。

就java而言,它将消耗你系统上所有可用的处理器和CPU线程。但是您在这里的实验中遇到的限制是操作系统级别的限制,大约是句柄可以阅读更多关于它的信息


也许你可以尝试在你的系统设置中摆弄一些东西,试图从你的实验中获得更多的见解。你可以试试这个。

你有一个while(true)循环,它不断地创建和启动工作线程。。。这实际上不是java问题,更不是编码语法问题,因为这在任何语言中都可能出现。“为什么操作系统不能在其他进程上运行?”如果您的代码没有在所有内核上消耗100%,那是因为
System.out.println()
是同步的,因此一次只有一个线程可以打印任何内容。就像32000人试图穿过一扇门。他们都在排队,或者更确切地说,他们都挤在门口等待通过。这是一个非常好的情况,java所做的,创建线程并让操作系统决定如何处理它们。您有一个while(true)循环,不断创建和启动工作线程。。。这实际上不是java问题,更不是编码语法问题,因为这在任何语言中都可能出现。“为什么操作系统不能在其他进程上运行?”如果您的代码没有在所有内核上消耗100%,那是因为
System.out.println()
是同步的,因此一次只有一个线程可以打印任何内容。就像32000人试图穿过一扇门。他们都在排队,或者更确切地说,他们都挤在门口等待通过。这是一个非常好的情况,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());
        }

    }

}