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
его ввод/вывод для ввода пользователем и не прерывание.Прерывание потока ожидает ввод данных пользователя
Выходной сигнал, который я хочу придумать с помощью этой программы:
Когда программа выполнена, пользователю необходимо ввести целочисленные значения и через пять секунд. сумма входных значений печатается либо пользователем, который все еще вводит значения, либо ждет 5 секунд. Результат будет напечатан сразу после 5 сек.
Я считаю, что ваша проблема заключается в том, что команда br.readLine() выполнит до того, как логическое значение для цикла будет переоценено. Это означает, что вам нужно будет ввести 1 номер после истечения цикла – jozefg
@jozefg: вы правы. У вас есть решение? –