终止Java线程
我目前正在学习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
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;
}
}
}
}