2017-10-26 8 views
-1

read()メソッドは、入力リソース(キーボード/ファイル/ネットワーク/プログラム)のストリームでバイトが使用可能になるまでブロックします。シングルスレッドのJavaプログラムの場合java.io.InputStream - read()

public abstract int read() throws IOException 

1)、blocked状態にjava processを移動するには、カーネルを有効read()をブロックしていますか?

2)マルチスレッドJavaプログラムの場合、1つのスレッドでread()をブロックすると、他のスレッドがCPUスライスを占有できますか? Javaプロセスを続けると、に実行され、CPUタイムスライスまでが実行されます。

+1

現実的には、シングルスレッドのJavaプロセスを見つけることはできません。 JVM自体は複数のスレッドを生成します。 –

+0

@AndrewHenleあなたはJVMシステムスレッドについて話していますか? GC/compiler/VM/..これは実行時にJavaプログラムの一部になります – overexchange

+1

プロセスにはそのような状態はなく、スレッドだけが行います。 –

答えて

1

シングルスレッドのJavaプログラムの場合、read()をブロックすると、カーネルはJavaプロセスをブロック状態に移行できますか?

シングルスレッドJavaプログラムのようなものはありませんが、存在する場合はあります。

マルチスレッドJavaプログラムの場合、あるスレッドでread()をブロックすると、他のスレッドがCPUスライスを占有できますか?

もちろんです。それ以外の場合、スレッドは無意味です。

Javaプロセスを実行すると、CPUタイムスライスまで実行状態が続きます。

はい。