2

現在、TCPソケットに取り組んでいます。サーバークラスはThreadから派生しています。

public class TCPServer extends Thread {

  public static int SERVERPORT = 54321;
....
<code>
}

このクラスを使用すると、いくつかのスレッドが開きます。私の質問は、各スレッドに独自の静的変数SERVERPORTがありますか?この変数を編集したように見えるので、他の人には効果がありません。

この問題に対する私の解決策は、「GlobalVariables」などの別のクラスを作成し、このクラスにそのクラスへのアクセスを許可することです。

4

1 に答える 1

6

私の質問は、各スレッドに独自の静的変数SERVERPORTがありますか?

いいえ、違います。変数は、プロセス内のすべてのスレッドで共有されます。

:Dを削除finalできませんでした私が持っている変数はタイプですstatic boolean

変数は共有されていますが、1つのスレッドで変数を変更した場合、変更は、後の不特定の時間まで、必ずしも他のスレッドに表示されるとは限りません。

可視性を確保するための手順を実行する必要があります。コードの実行内容に応じて、これには次のものが含まれます。

  1. 明示的な同期。
  2. を使用してvolatile boolean;
  3. を使用しAtomicBooleanます。
于 2013-03-14T11:52:39.757 に答える