gpt4 book ai didi

java - Java线程是在用户空间还是内核空间创建的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:26 25 4
gpt4 key购买 nike

检查这段代码

    Thread t1 = new Thread(new Runnable() {

@Override
public void run()
{
try
{
System.out.println("STARTING SERVER...");
ServerSocket s = new ServerSocket(2544);
System.out.println("SERVER BLOCKED ON ACCEPT");
Socket ss = s.accept();
System.out.println("SERVER NOT BLOCKED ANYMORE");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
});
t1.start();



Thread t2 = new Thread(new Runnable() {

@Override
public void run()
{
try
{
while(true)
{
Thread.sleep(1000);
System.out.println("Hello");
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
});
t2.start();

输出:

STARTING SERVER...
SERVER BLOCKED ON ACCEPT
Hello
Hello
Hello
Hello
Hello
Hello
Hello
...

Java线程应该是用户空间线程吧?所以一个被阻塞的线程应该阻塞整个过程......那不是发生的事情。他们发生了什么事?

最佳答案

Java 线程是“用户”线程,但在幕后,Java 虚拟机正在使用内核线程,并将其内核线程池中的每个内核线程的 CPU 时间委派给用户线程。参见 this question为了更好的解释。似乎线程是特定于 JVM 供应商的,我的理解可能不适用于所有 JVM 实现。

关于java - Java线程是在用户空间还是内核空间创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278425/

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