gpt4 book ai didi

java - 中断等待用户输入的线程

转载 作者:行者123 更新时间:2023-11-30 04:54:24 25 4
gpt4 key购买 nike

    public class InterruptedInput {

public static void main(String[] args) {
InputThread th=new InputThread(); //worker thread instantiated.
th.start(); //worker thread start.
try{
Thread.sleep(5000); //main thread sleep for 5 sec.
}catch(InterruptedException ex){}
th.interrupt(); //worker thread interrupted.
}
}

class InputThread extends Thread{
int sum;
BufferedReader br;
public void run(){
br=new BufferedReader(new InputStreamReader(System.in));
try{
sum();
sleep(10000); //worker thread sleep for 10 sec.
}catch(Exception ex){
System.out.println("sum="+sum);
}
}

public void sum(){
try{
while(!isInterrupted()){
sum+=Integer.parseInt(br.readLine());
}
}catch(Exception ex){}
}
}

在这个程序中,工作线程等待用户输入(这将是一个整数值)并求和,直到主线程 interrut() 它.
但是,当主线程 interrupt() 时,工作线程 会进行 I/O 用户输入而不是中断。

我想要这个程序的输出是:
当程序执行时,用户必须输入整数值,五秒后。用户仍在输入值或等待 5 秒后,将打印输入值的总和。结果将在第 5 秒后打印。

最佳答案

好的,所以这段代码的问题在于,必须在检查循环条件之前执行语句br.readLine()。所以为了避免这种情况,我可能会有 3 个线程。

主题 1:

这将是主线程或父线程。在此线程中,您只需数到 5,然后中断线程 2。

主题 2:

在此线程中,您将监视静态变量:count,然后打印它并在中断时中断线程 3。

主题 3:

在这里,您将获取输入并将输入传递给函数,该函数会将其添加到count中。被中断时不执行任何操作。

如果您有任何疑问,请告诉我。

关于java - 中断等待用户输入的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8997310/

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