我目前正在学习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,单独返回应该足以终止显示的线程,但它不适用于我。线程只是继续完成他们的任务。任何帮助将不胜感激。
答案 0 :(得分:4)
每次调用/etc/apache2/envvars
都会创建一个新的线程数组,因此您对letters.getThreads()
和Thread.start()
的调用会调用完全不同的线程集。