Отследить окончание загрузки в другом потоке

Как я могу прервать и отследить загрузку, запущенную в другом потоке? Загрузка реализована через 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);
        }

    }

Пересоздание экземпляра где реализована загрузка не прерывает ее, а найденные примеры не удалось применить у себя.


Ответы (0 шт):