Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
终止Java线程_Java - Fatal编程技术网

终止Java线程

终止Java线程,java,Java,我目前正在学习Java,刚刚谈到线程的话题。我正试图开发一个程序,从输入中打印一些字母,但我遇到了终止线程的问题,坦率地说,我不知道下一步该怎么做。这是我的密码: public class Main { public static void main(String[] args) throws InterruptedException { Letters letters = new Letters("ABCD"); for (Thread t : letters.getTh

我目前正在学习Java,刚刚谈到线程的话题。我正试图开发一个程序,从输入中打印一些字母,但我遇到了终止线程的问题,坦率地说,我不知道下一步该怎么做。这是我的密码:

public class Main {

  public static void main(String[] args) throws InterruptedException {
    Letters letters = new Letters("ABCD");
    for (Thread t : letters.getThreads()) System.out.println(t.getName());
    for (Thread t : letters.getThreads()) t.start();
    Thread.sleep(5000);
    for (Thread t : letters.getThreads()) t.interrupt();
    System.out.println("\nProgramme has finished working");
  }

}
我试图在1秒的时间间隔内,从这个字符串中打印出单独的字母,每个字母从它自己的单独线程中打印5秒,在此期间,主线程将等待。在此之后,我希望所有这些线程都通过使用interrupt()方法终止

公开课信函{
私有字符串输入;
char[]signs=null;
公函(字符串输入){
这个输入=输入;
符号=新字符[input.length()];
对于(int i=0;i对于(int i=0;i对
字母.getThreads()
的每次调用都会创建一个新的线程数组,因此对
线程.start()
线程.interrupt()
的调用会调用完全不同的线程集。

字母.getThreads()
的每次调用都会创建一个新的线程数组,因此对
线程.start()的调用会创建一个新的线程数组
Thread.interrupt()
正在调用完全不同的线程集。

为什么要使用interrupt()终止?线程完成后将自动终止?您的问题的答案将是使用Thread#Join()或倒计时闩锁或循环键请正确缩进代码。您必须自己执行中断检查,即定期检查
Thread.currentThread().isInterrupted()
,并在必要时取消计算。备注:您应该使用(或重载版本之一)等待线程完成。您不应该这样做。不要使用JDK 1.0原始线程。请考虑新的java.util.concurrent包。@Turing85我使用thread.currentThread().isInterrupted()作为方法run()中的条件。为什么要使用interrupt()终止?线程完成后将自动终止?您的问题的答案将是使用thread#Join()或CountDownLatch或CyclicBarrier正确缩进代码。您必须自己执行中断检查,即检查
thread.currentThread().isInterrupted()
定期检查并在必要时取消计算。注意:您应该使用(或重载版本之一)等待线程完成。您不应该这样做。不要使用JDK 1.0原始线程。请考虑新的java.util.concurrent包。@Turing85我使用thread.currentThread().isInterrupted()作为方法run()中的条件
public class Letters {
    private String input;
    char[] signs=null; 

    public Letters(String input) {
        this.input = input;
        signs= new char[input.length()];
        for (int i = 0; i < input.length(); i++) {
            signs[i] = input.charAt(i);
        }
    }

    MyThread[] getThreads() {
        MyThread thread_arr[]=new MyThread[signs.length];
        for (int i=0; i<signs.length;i++)
        {thread_arr[i]=new MyThread(signs[i]);
        }

        return thread_arr;}

}

public class MyThread extends Thread {
private char out;
public MyThread(char out) {
    super();
    this.out = out;
    this.setName("Thread "+out);
}
public void run() {
    while(!Thread.currentThread().isInterrupted())
    {
    try {
        System.out.print(out);
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        return;
    }

    }


}



}