Вы могли бы что-то вроде следующего:
import java.util.concurrent.* ;
ExecutorService svc = Executors.newFixedThreadPool( 1 ) ;
svc.submit( new Runnable() {
public void run() {
// Do long running task
}
} ) ;
svc.shutdown() ;
svc.awaitTermination( 300, TimeUnit.SECONDS ) ;
Javadocs для ExecutorService здесь
[править]
Я, вероятно, должен отметить, однакочто в зависимости от того, что делает ваша долгосрочная задача, может быть невозможно заставить ее прекратить выполнение
[edit2], метод submit возвращает объект Future
, который затем можно вызвать get
вкл с таймаутом .Этот вызов get
будет блокироваться до тех пор, пока результат не будет готов или по истечении времени ожидания возникнет исключение TimeoutException.Таким образом, вы можете получить результат от своей длительной задачи, если это то, что вы хотели