gpt4 book ai didi

java - 执行者服务 - 线程超时

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:13 25 4
gpt4 key购买 nike

当我探索 ExecutorService 时,我遇到了一个接受 timeout 的方法 Future.get()

这个方法的 Java 文档说


如有必要,最多等待计算完成的给定时间,然后检索其结果(如果可用)。

参数:

timeout等待的最长时间

unit超时参数的时间单位


根据我的理解,我们对 callable 施加超时,我们提交给 ExecutorService 这样,我的 callable 将 < strong>在指定时间(超时)过去后中断

但根据下面的代码,longMethod() 似乎在超时(2 秒)后运行,我真的很困惑理解这一点。谁能给我指出正确的道路?

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Timeout implements Callable<String> {

public void longMethod() {
for(int i=0; i< Integer.MAX_VALUE; i++) {
System.out.println("a");
}
}

@Override
public String call() throws Exception {
longMethod();
return "done";
}


/**
* @param args
*/
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();

try {
service.submit(new Timeout()).get(2, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
}


}

最佳答案

我的可调用函数将在指定时间(超时)过去后中断

不是真的。任务将继续执行,超时后您将得到一个空字符串。

如果要取消:

  timeout.cancel(true) //Timeout timeout = new Timeout();

附言正如您现在所拥有的那样,此中断将永远不会产生任何影响。您没有以任何方式检查它。

例如,这段代码考虑了中断:

    private static final class MyCallable implements Callable<String>{

@Override
public String call() throws Exception {
StringBuilder builder = new StringBuilder();
try{
for(int i=0;i<Integer.MAX_VALUE;++i){
builder.append("a");
Thread.sleep(100);
}
}catch(InterruptedException e){
System.out.println("Thread was interrupted");
}
return builder.toString();
}
}

然后:

        ExecutorService service = Executors.newFixedThreadPool(1);
MyCallable myCallable = new MyCallable();
Future<String> futureResult = service.submit(myCallable);
String result = null;
try{
result = futureResult.get(1000, TimeUnit.MILLISECONDS);
}catch(TimeoutException e){
System.out.println("No response after one second");
futureResult.cancel(true);
}
service.shutdown();

关于java - 执行者服务 - 线程超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16277191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com