Использование ExecutorService и Future для тайм-аута работающей функции - PullRequest
0 голосов
/ 13 марта 2019

Я работаю над упражнением, в котором мне нужно изменить текущий код XMLReader и реализовать тайм-аут.

В упражнении мы хотим, чтобы мы запустили функцию в другом потоке с тайм-аутом за ним, чтобы тайм-аут считывателя был слишком долгим.

Концептуально это имеет смысл, но я никогда не работал с потоками, и я ржавый на Java поверх него.

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

Любая помощь будет оценена. (Два прокомментированных утверждения - это то, что я на самом деле запустил бы вместо сна и возврата, если бы я заставил его работать.

public class xmlParser{

    public static void main(String[] args) {
            try{

                if(args.length != 1) throw new IOException("Need a valid xml file name.");

                XMLReader xmlReader = XMLReaderFactory.createXMLReader();

                xmlReader.setContentHandler(new MyContentHandler());

                ExecutorService executor = Executors.newSingleThreadExecutor();

                Future<Void> future = executor.submit(new Callable<Void>(){
                        public Void call() throws Exception {
                                Thread.sleep(20000);
                                //xmlReader.parse(new InputSource(args[0]));
                                return null;
                        }
                });

                try{
                        future.get(5, TimeUnit.SECONDS);
                }
                 catch (Exception e){
                        return;
                        //future.cancel(true);
                }
            } catch(Exception e){
                e.printStackTrace();
            }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...