我正在尝试编写一个方法来创建一个线程,该线程在该方法已经返回后可以工作。我需要这个线程在一定时间后超时。我有一个可行的解决方案,但我不确定这是否是最好的方法。 new Thread(() -> { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Void> future = executor.submit(new Callable() { public Void call() throws Exception { workThatTakesALongTime(); }); try { future.get(timeoutMillis, TimeUnit.MILLISECONDS); } catch (Exception e) { LOGGER.error("Exception from timeout.", e); } }).start();有没有更好的方法来做到这一点而不使用线程中的 ExecutorService ?
2 回答
函数式编程
TA贡献1807条经验 获得超9个赞
有多种方法可以实现这一点。正如您所做的那样,一种方法是使用 ExecutorService。一个更简单的方法是创建一个新线程和一个队列,如果每隔几秒就有一些东西,线程就会从中查找。一个例子是这样的:
Queue<Integer> tasks = new ConcurrentLinkedQueue<>();
new Thread(){
public void run() throws Exception {
while(true){
Integer task = null;
if((task = tasks.poll()) != null){
// do whatever you want
}
Thread.sleep(1000L); // we probably do not have to check for a change that often
}
}
}.start();
// add tasks
tasks.add(0);
添加回答
举报
0/150
提交
取消
