【发布时间】:2012-02-18 07:38:09
【问题描述】:
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() worker thread 它在 I/O 上用于用户输入并且不会中断。
我想提出这个程序的输出是:
当程序执行时,用户必须在五秒后输入整数值。输入值的总和被打印出来,要么用户仍在输入值,要么等待 5 秒消失。结果将在第 5 秒后立即打印。
【问题讨论】:
-
我相信您的问题是 br.readLine() 将在重新评估循环的布尔值之前执行。这意味着您必须在循环到期后输入 1 个数字
-
@jozefg:你是对的。你有什么解决办法吗?
标签: java multithreading