fre*_*crs 8 java multithreading kernel
检查此代码
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();
Run Code Online (Sandbox Code Playgroud)
输出:
STARTING SERVER...
SERVER BLOCKED ON ACCEPT
Hello
Hello
Hello
Hello
Hello
Hello
Hello
...
Run Code Online (Sandbox Code Playgroud)
Java线程应该是用户空间线程,对吧?所以一个被阻止的线程应该阻止整个过程...那不是发生了什么.他们发生了什么事?
大多数JVM使用本机OS级别线程实现线程,包括基于OpenJDK的Oracle参考实现.
我想使用"绿色线程"(线程的用户空间模拟)的JVM将使用抢占式调度,以便一个线程中的无限循环不会阻塞其他线程,但是如果不了解特定实现,这只是推测.