Я работаю над упражнением, в котором мне нужно изменить текущий код 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();
}
}
}