チェックアウトこのコードをユーザ空間またはカーネル空間に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はいのプログラムカウンタ、スタックなどをロードする必要がないので、リソースを消費しませんが、実際にはうまく機能しません。 –