gpt4 book ai didi

java - 终止 Java 线程

转载 作者:行者123 更新时间:2023-11-29 08:28:59 25 4
gpt4 key购买 nike

最近在学习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 秒的间隔打印来自该 String 的单独字母,每个字母都来自其自己的单独线程 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 教程,仅返回就足以终止显示的线程,但它对我不起作用。线程只是继续执行它们的任务。任何帮助将不胜感激。

最佳答案

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

关于java - 终止 Java 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49863074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com