终止Java线程

时间:2018-04-16 17:27:35

标签: java

我目前正在学习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()方法终止所有这些线程。

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;
    }

    }


}



}

我知道根据关于并发的官方Java Tutorial,单独返回应该足以终止显示的线程,但它不适用于我。线程只是继续完成他们的任务。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

每次调用/etc/apache2/envvars都会创建一个新的线程数组,因此您对letters.getThreads()Thread.start()的调用会调用完全不同的线程集。