Я пытаюсь написать свою первую многопоточную программу на Java. Я не могу понять, почему нам нужна эта обработка исключений вокруг циклов for. Когда я компилирую без предложений try/catch, он дает InterruptedException
.
Вот сообщение:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Unhandled exception type InterruptedException
Но при запуске с помощью try/catch sysout в блоках catch никогда не отображается, что означает, что такое исключение все равно не было перехвачено!
public class SecondThread implements Runnable {
Thread t;
SecondThread() {
t = new Thread(this, "Thread 2");
t.start();
}
public void run() {
try {
for (int i=5; i>0; i--) {
System.out.println("thread 2: " + i);
Thread.sleep(1000);
}
}
catch (InterruptedException e) {
System.out.println("thread 2 interrupted");
}
}
}
public class MainThread {
public static void main(String[] args) {
new SecondThread();
try {
for (int i=5; i>0; i--) {
System.out.println("main thread: " + i);
Thread.sleep(2000);
}
}
catch (InterruptedException e) {
System.out.println("main thread interrupted");
}
}
}
When I compile without the try/catch clauses it gives an InterruptedException
: нет, это дает ошибку, что вы не перехватываете это проверенное исключение - это сильно отличается от того, что компилятор выдает вам исключение. - person OrangeDog   schedule 02.06.2016InterruptedException
, один из вариантов — использовать GuavaUninterruptibles.sleepUninterruptibly()
, который правильно подавляетInterruptedException
, но (как следует из названия) означает, что вы больше не можете прерывать сон, что часто не то, что вы действительно хотите делать. - person dimo414   schedule 02.06.2016