Menci Lucio Ответов: 2

Могу ли я принудительно прервать поток?


Я написал класс, который отправляет некоторый контент через сеть. У меня был некоторый issuse, потому что отправка файла не закончилась более чем через 10 часов, я думаю, из-за прерываний соединения.

Что я уже пробовал:

Я хотя бы поместил метод отправителя в другой поток и попытался прервать его после тайм-аута, если он еще не закончился. Но проблема находится внутри класса ядра, и я не могу поместить в него запрос, чтобы проверить, проверен ли Therad.isinterrupted.

Могу ли я усечь поток, не попросив его завершить работу с помощью метода прерывания?

Спасибо, Лусио Менчи

2 Ответов

Рейтинг:
0

Daniel Pfeffer

Учитывая соответствующие настройки безопасности для вызывающего и принимающего потоков, можно использовать метод interrupt() для подачи сигнала вашему рабочему потоку. Вам все равно придется проверять состояние прерывания с помощью метода isinterrupted (), так что это не поможет с чистым выходом из режима ядра.

Одним из способов было бы разделить файл для отправки на небольшие куски и отправить каждый кусок с таймаутом. Если отправка завершается неудачно или метод isinterrupted() возвращает true, рабочий поток может очиститься и выйти.


Рейтинг:
0

Menci Lucio

Спасибо за ответ.

Моя проблема заключается в том, что я отправляю сотни файлов размером около 100 байт, под AS400 o.s..
Мой супер отправляет их с помощью PrintWriter, направленного на java.net.URL([...]).openConnection().getOutputStream (), и записывает в него через println.

Если во время println происходит прерывание соединения и он выключен более чем на 30 секунд, println ожидает завершения процесса.

Боюсь, что здесь нет никаких решений.