Я пытаюсь убить нить, которая висит из-за тяжелой операции ввода-вывода. я мог бы попробовать thread.destroy
или thread.stop
, но они устарели Например, посмотрите на ниже кодКак убить витую нить в java
public class ThreadCheck {
private static int cnt = 0;
public static void main(String args[]) throws InterruptedException, ExecutionException {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Running tasks");
while (condition) {
// **** Some IO operation that take forever ****
System.out.println("iteration " + cnt++);
if (Thread.currentThread().isInterrupted()) {
System.out.println("Breaking loop");
return;
}
}
}
});
t1.start();
TimeUnit.SECONDS.sleep(5);
t1.interrupt();
System.out.println("thread destroyed..");
}
}
Проблема в том, я добавил interrupt
вызов, но он никогда не заканчивает IO вызов, так что я могу убить нить в таком случай
Это зависит от точных операций ввода-вывода. Если вы, например, можете изменить свой код, чтобы использовать 'InterrptibleChannel', вы сможете достичь того, что вам нужно. Во всяком случае, операция ввода-вывода имеет важное значение для того, чтобы это было подотчетно. – RealSkeptic
Да, что он ^^^^ сказал! –
@RealSkeptic Я читаю некоторые CSV-файлы и вставляю данные из них в базу данных, но иногда эти файлы CSV повреждаются, а вызов IO никогда не заканчивается, в этом случае java имеет любую реализацию, с помощью которой я могу убить поток, как в команде unix kill – Nomad