Systemクラスがどのように機能するかについて質問があります。
接続するクライアントごとにスレッドを作成するサーバーがあり、ある時点でスレッドがSystem.out.println(message)を呼び出すとします。そのメッセージが印刷されるのはどのコンピューターですか?サーバーのコンピューターですか、それともクライアントコンピューターですか。どちら側がスレッドを作成したかは重要ですか?
Systemクラスがどのように機能するかについて質問があります。
接続するクライアントごとにスレッドを作成するサーバーがあり、ある時点でスレッドがSystem.out.println(message)を呼び出すとします。そのメッセージが印刷されるのはどのコンピューターですか?サーバーのコンピューターですか、それともクライアントコンピューターですか。どちら側がスレッドを作成したかは重要ですか?
そのメッセージが印刷されるのはどのコンピューターですか?サーバーのコンピューターですか、それともクライアントコンピューターですか。
サーバー上にあります。
どちら側がスレッドを作成したかは重要ですか?
クライアントがサーバー上にスレッドを作成することは不可能です(逆もまた同様です)。サーバーはクライアントからの接続に応じて新しいスレッドを作成できますが、それはまったく異なります。
簡単に言えば、コードがサーバーで実行されている場合、誰かがローカルスレッドストレージに格納されているソケットを介して出力するSystem.out
通常の動作をオーバーライドしsetOut
て実装しない限り、サーバーに出力します。PrintStream
そして、彼らはそうしません、それはやるのが難しいことでしょう。:-)
サーバー上のスレッドと、サーバーと通信する一部のクライアント上のスレッドとの間に関係はありません。サーバー上のSystem.outと、サーバーと通信するクライアント上の何かとの間に関係はありません。System.outに何かを送信する効果は、(リダイレクトしない限り)プログラムがクライアント、サーバー、またはハンガーのいずれであるかとはまったく関係ありません。
それぞれThread
がサーバーのマシン上で作成され、サーバーのマシン上で実行されます。System.out
呼び出しはサーバーのマシンに出力されます。
サーバーが印刷されます。System.out.printlnは、呼び出し元のサーバークライアントの外部条件の影響を受けません。