Отследить окончание загрузки в другом потоке
Как я могу прервать и отследить загрузку, запущенную в другом потоке? Загрузка реализована через FileOutputStream getChannel().transferFrom(). Разрабатываю в fxml и хотелось бы иметь возможность по кнопке прервать загрузку, а так же отслеживать ее окончание (окончание потока). Мой код:
public void startDownload(String url, String fileName) throws IOException {
Thrd thrd = new Thrd(url+"/"+fileName+".xml?begin_date="+startPeriodDate+"&end_date="+endPeriodDate, fileName);
thrd.start();
}
class Thrd extends Thread{
private String url;
private String fileName;
Thrd(String url, String fileName){
this.url = url;
this.fileName = fileName;
}
@Override
public void run() {
URL web = null;
try {
web = new URL(url);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
ReadableByteChannel rbc = null;
try {
rbc = Channels.newChannel(web.openStream());
} catch (IOException e) {
throw new RuntimeException(e);
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(fileName+".xml");
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Пересоздание экземпляра где реализована загрузка не прерывает ее, а найденные примеры не удалось применить у себя.