0

現在無限ループしているスレッドを終了する方法を見つけようとしています。私の経験では、無限にループしている最初のスレッドを中断する2番目のスレッドを作成しようとしましたが、もちろん無限ループのために...最初のスレッドはスリープ機能に到達しませんでした。だから今、私はこれに戻っています

public class Pulse{

private static int z = 0;

public static void main( String[] args ) throws Exception {
    try {
        final long stop=System.currentTimeMillis()+5L;
            //Creating the 2 threads
        for (int i=0; i<2; i++) {
            final String id=""+i+": ";
            new Thread(new Runnable() {
                public void run() {
                    System.err.println("Started thread "+id);
                    try{
                        while ( System.currentTimeMillis() < stop ) {
                                    //Purposely looping infinite
                            while(true){
                                z++;
                                System.out.println(z);
                            }
                        }
                    } catch (Exception e) {
                        System.err.println(e);
                    }
                }
            }).start();
        }
    } catch (Exception x) {
        x.printStackTrace();
    }
}
}
4

4 に答える 4

2

volatile booleanフィールドを持っている、と言ってrunningください。それを作るtrue。それを、およびにwhile (true)変更した場所。ここで、別のスレッドから変更します。これにより、ループがかなりうまく停止するはずです。while (running)while ( System.currentTimeMillis() < stop ) {while (running && ( System.currentTimeMillis() < stop) ) { runningfalse

于 2012-05-03T14:45:36.633 に答える
1

あなたはこのようなことをしなければなりません:

public class ThreadStopExample {
    public static volatile boolean terminate = false;

    public static void main(String[] args) {
        new Thread(new Runnable() {
            private int i;

            public void run() {
                while (!terminate) {
                    System.out.println(i++);
                }
                System.out.println("terminated");
            }
        }).start();
        // spend some time in another thread
        for (int i = 0; i < 10000; i++) {
            System.out.println("\t" + i);
        }
        // then terminate the thread above
        terminate = true;
    }
}
于 2012-05-03T14:49:48.267 に答える
1

変更できますか

 while(true){

while(!Thread.currentThread().isInterrupted()){ //or Thread.interrupted()

これで、スレッドを中断すると、無限ループから正しく抜け出すはずです。

于 2012-05-03T14:46:02.980 に答える
1

ループ内で Thread.interrupted() 呼び出しを実行して、中断されたかどうかを確認し、適切に処理する必要があります。または while(!Thread.interrupted()) 代わりに。

于 2012-05-03T14:46:19.993 に答える