У меня есть 2 потока: main и Thread2.
Главное --> создать Thread2, приостановить работу на 3 секунды, выйти.
Thread2 --> прочитать строку из System.in и выйти.
Я хочу разбудить Thread2, если он заблокирован в readline(), я не хочу использовать тайм-аут, и закрытие основного потока ввода путем создания исключения в Thread2 не работает.
Код:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InterruptedIOException;
public class Main {
public static void main(String[] args) throws InterruptedException {
InputStreamReader sc = new InputStreamReader(System.in);
Thread2 t = new Thread2(sc);
Thread tt = new Thread(t);
tt.start();
Thread.sleep(3000);
System.out.println("exit sleep");
tt.interrupt();
System.out.println("exit main");
}
}
class Thread2 implements Runnable {
InputStreamReader qst;
public Thread2(InputStreamReader sc) {
qst = sc;
}
public void run() {
BufferedReader buff = new BufferedReader(qst);
try {
System.out.println("read thread");
buff.readLine(); //Here is locked!!!!!!!!!!!!!!!!!!
} catch (InterruptedIOException e) {
System.out.println("exit thread");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Выполнение (println):
-Читать ветку
(через 3 секунды)
-выйти из сна
-выход из главного
Но Thread2 без остановки -> это блок в строке чтения. Почему?