2

私はクライアント サーバー アプリケーションを読み、クライアントはサーバーを介して相互作用します。したがって、この目的のために、別のスレッドでクライアントを作成したいと考えています。(そうでない場合、IO によってブロックされることがよくあります)。

ここに私のクライアントコードがあります:

public class Client {

   //some client code here

   public static void main(String[] args) {
        new Thread() {
            @Override
            public void run() {
                long threadId = Thread.currentThread().getId();
                System.out.println("Client creator thread id: " + threadId);
                                Client c = new Client();
                                // some code to run client
            }

        }.start();
   }
}

このクラス ファイルを複数回実行します (IDE で直接実行するか、bat ファイルを作成します)。そして、それらすべてが同じスレッド (同じスレッド ID) にあることに気付きました。理由は説明できません。

私が遭遇する問題は次のとおりだと思います。同じクラスで複数のスレッドを作成するのではなく、このクラスを複数回実行します。これは奇妙な問題だと思いますが、それでも理由を説明できません。

私とこれを修正する方法を説明してください。

ありがとう :)

4

3 に答える 3

1

次のように for ループでスレッドを生成する場合:

    public class Client {

    public static void main(String[] args) {

        for (int i = 0; i < 10; i++) {

             new Thread() {
                 @Override
                 public void run() {
                     long threadId = Thread.currentThread().getId();
                     System.out.println("Client creator thread id: " + threadId);
                                     Client c = new Client();
                                     // some code to run client
                 }

             }.start();
        }
    }
 }

1 つのプロセス内に異なる ID を持つ多数のスレッドがあります。main() を実行し続けると、スレッドが 1 つしかない別のプロセスが作成されます。

于 2013-04-19T12:12:09.527 に答える
0

本当に複数のクライアントをテスト/エミュレートしたい場合は、複数のプロセスを開始する必要があります。そのため、スレッドの作成をいじる必要もありません。実際には、クライアントが同じプロセスで実行されることはありません (同じマシン上でなくても?)。それはあなたにこのことを理解させることはできませんが、私はあなたを現実に近づけます.

于 2013-04-19T12:55:30.643 に答える