7

私がする必要があるのは、runnable を実装する 1 つのスレッド クラスから実行されているすべてのスレッドを停止できるようにすることです。これが私が言いたいことです: これが私の「スレッド」クラスの始まりです:

public class HTTP extends Thread
{   
    int threadNumber;
    String host;
    int port;
    int timeLeft;
    private BufferedReader LocalBufferedReader;

    public HTTP(int threadNumber, String host, int port, int timeLeft)
    {
        this.threadNumber = threadNumber;
        this.host= host;
        this.port = port;
        this.timeLeft = (timeLeft * 1000);
    }

  public void run()
  {

これは、これを行うために複数のスレッドを作成する方法です。

 for (int n = 1; n <= m; n++) {
      new HTTP(n + 1, str, j, k).start();
    }

m は、作成するスレッドの数です。これは 50 ~ 1000 の範囲です。今私がする必要があるのは、それらすべてを一度に突然停止することです. どうやってやるの?

4

3 に答える 3

9

最初にすべてのスレッドを保存します。

ArrayList<Thread> threads = new ArrayList<Thread>();
for (int n = 1; n <= m; n++) {
    Thread t = new HTTP(n + 1, str, j, k);
    threads.add(t);
    t.start();
 }

stopメソッドについては、すべてのスレッドをループして、割り込みを呼び出します。

for(Thread thread : threads)
{
    thread.interrupt();
}

isIntruppted()HTTP スレッドをチェックインしてください。したがって、次のようにします。

public class InterruptTest {

    static class TThread extends Thread {
        public void run() {
            while(!isInterrupted()) {
                System.out.println("Do Work!!!");
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    return;
                }
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread t = new TThread();
        t.start();

        Thread.sleep(4000);
        System.out.println("Sending interrupt!!");
        t.interrupt();
        Thread.sleep(4000);
    }

}
于 2013-01-09T21:31:51.670 に答える
3

Java でのスレッドの停止は、割り込みで実装された協調プロセスです。スレッドを保存して、1 つずつ中断することができます。

List<Thread> threads = new ArrayList<> ();

for (int n = 1; n <= m; n++) {
  Thread t = new HTTP(n + 1, str, j, k);
  threads.add(t);
  t.start();
}

//later on

for (Thread t : threads) {
    t.interrupt();
}

ただし、いくつかの点に注意する必要があります。

  • runこれは、メソッドが実行していることを停止することによって中断に反応する場合にのみ機能します
  • たとえば、 Executorsクラスによって提供されるさまざまなファクトリ メソッドによって返されるExecutorServiceの 1 つを使用することにより、スレッド プールを使用して同じことをより簡単に行うことができます。彼らは実際にスレッドのライフサイクルを処理します。
于 2013-01-09T21:32:45.110 に答える
3

まず、1000 個のスレッドを開始しても、実際に同時に実行するようにスケジュールされているスレッドはほとんどないため、実質的に無意味です。

次に、スレッドを「停止」することはできません。あなたができることは、協力的なコードを介してうまく停止するように依頼することだけです.

必要なことを行う最も簡単な方法は、JVM をシャットダウンすることです。

于 2013-01-09T21:33:43.810 に答える