检查这个代码出在用户空间或内核空间中创建Java线程吗?
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线程应该是用户空间线程,对不对?所以一个阻塞的线程应该阻止整个过程......那不是发生了什么。他们发生了什么?
如果一个被阻塞的线程阻塞整个进程,多线程的要点是什么? –
用户空间线程消耗更少的资源,因为它们不需要提供程序计数器,堆栈等等......内核线程 – fredcrs
@fredcrs是的,但它们实际上并不能很好地工作。 –