0

我正在尝试找到一种方法来终止当前无限循环的线程。以我的经验,我尝试创建第二个线程,该线程将中断第一个无限循环的线程,但当然由于无限循环......第一个线程永远不会到达睡眠功能。所以现在我回到这个

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

你能改变吗

 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 回答
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 回答