-1

LinuxOS上のJavaで小さなクライアントサーバーアプリケーションを実行しました。サーバーはクライアントからさまざまなコマンドを受け取り、さまざまなスレッドを開始してそれらを処理します。コマンドごとに1つの特定のスレッドがあります。

私のメインプログラムは、さまざまなコマンドに応答し、1つの無限ループで構成されるスレッドを開始します。ループからの出口はまだありません。このスレッドは、メインプログラムが開始されたターミナルに出力されますが、「。start()」の後のコマンドは実行されません。

ServerSend servSend = new ServerSend(arg);
System.out.println("1"); 
servSend.start();
System.out.println("2");`

したがって、「2」は出力されませんが、スレッド内の「System.out.println()」は機能します。誰かがその理由を知っていますか?

4

1 に答える 1

1

新しいスレッドを生成しようとしている場合は、ServerSend実装java.lang.Runnableまたは拡張を想定しています。その場合は、メソッドではなくjava.lang.Threadメソッドを上書きする必要があります。public void run()start()

すなわち:

public class ServerSend implements java.lang.Runnable {
    public Thread thread;
    public ServerSend(arg) {
        //constructor
        thread = new Thread(this);
    }
    public void run() {
        //the contents of this method are executed in their own thread
    }
}

そして、それを一緒に使用します。

ServerSend s = new ServerSend(arg);
s.thread.start();

へのパブリックアクセスthreadにより、次のようなことができます。

s.thread.interrupt();

Runnableこれは(を使用して)他の人が拡張することを好む私の好ましい方法Threadです。この答えは私の考えをかなり要約しています:https ://stackoverflow.com/a/541506/980520

于 2012-10-30T16:47:46.040 に答える