- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试探索 Java8 中的 CompletableFuture,我编写了这个简单的示例来使用假 api,但我收到了此编译错误,我在该代码周围添加了 try/catch block ,但我仍然得到相同的编译错误。
* FakeAPI1 *
package com.fake.api;
public class FakeAPI1 implements FakeAPI{
@Override
public void consume(){
try{
Thread.sleep(1000L);
System.out.println("Hello from FakeAPI1");
}catch(InterruptedException e){
System.out.println("Eat it silently");
}
}
public String getRandomText(){
System.out.println("getRandomText() @ FakeAPI1 was called ");
try{
Thread.sleep(1000L);
return "Hello from FakeAPI1";
}catch(InterruptedException e){
System.out.println("Eat it silently");
}
return "Default message from FakeAPI1";
}
}
* CompletableFutureTest *
package com.example.completablefuture;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
import com.fake.api.FakeAPI1;
public class CompletableFutureTest {
public static void main(String[] args)
throws InterruptedException,ExecutionException {
List<Future<FakeAPI1>> apis=
Arrays.asList(
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>()
);
Long start= System.currentTimeMillis();
apis.stream()
//Compilation error is in the line below
//Unhandled exception type ExecutionException
.map(api->api.get().getRandomText())
.collect(Collectors.toList());
Long end= System.currentTimeMillis();
System.out.println("CompletableFutureTest took " + (end-start) + " ms" );
}
}
我按照下面答案中的建议添加了 try/catch block ,编译错误不再显示,但是当我运行代码时它没有执行任何操作,看起来它正在等待某些东西......
package com.example.completablefuture;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.stream.Collectors;
import com.fake.api.FakeAPI1;
public class CompletableFutureTest {
public static void main(String[] args)
throws InterruptedException,ExecutionException {
List<CompletableFuture<FakeAPI1>> apis=
Arrays.asList(
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>()
);
Long start= System.currentTimeMillis();
List<String> result= apis.stream()
.map(api-> {
try {
System.out.println("1");
api.get().getRandomText();
}catch (ExecutionException e) {
// TODO: return something else or throw a runtime exception
System.out.println("ExecutionException");
}catch(InterruptedException e){
// TODO: return something else or throw a runtime exception
System.out.println("InterruptedException");
}
return "NA";
})
.collect(Collectors.toList());
result.stream()
.forEach(System.out::println);
Long end= System.currentTimeMillis();
System.out.println("CompletableFutureTest took " + (end-start) + " ms" );
}
}
我向 get() 方法添加了一个 Timeout 参数,它开始抛出 InterruptedException
package com.example.completablefuture;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import com.fake.api.FakeAPI1;
public class CompletableFutureTest {
public static void main(String[] args)
throws InterruptedException,ExecutionException {
List<CompletableFuture<FakeAPI1>> apis=
Arrays.asList(
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>(),
new CompletableFuture<FakeAPI1>()
);
Long start= System.currentTimeMillis();
List<String> result= apis.stream()
.map(api-> {
try {
System.out.println("about to call get() method ...");
api.get(1000L, TimeUnit.MILLISECONDS).getRandomText();
}catch (ExecutionException e) {
// TODO: return something else or throw a runtime exception
System.out.println("ExecutionException");
}catch(InterruptedException e){
// TODO: return something else or throw a runtime exception
System.out.println("InterruptedException");
}catch(TimeoutException e){
// TODO: return something else or throw a runtime exception
System.out.println("InterruptedException");
}
return "NA";
})
.collect(Collectors.toList());
result.stream()
.forEach(System.out::println);
Long end= System.currentTimeMillis();
System.out.println("CompletableFutureTest took " + (end-start) + " ms" );
}
}
about to call get() method ...
InterruptedException
about to call get() method ...
InterruptedException
about to call get() method ...
InterruptedException
NA
NA
NA
CompletableFutureTest took 3062 ms
最佳答案
您没有在正确的位置捕获异常。 map()
需要 Function 。并且函数不能抛出任何已检查的异常。所以你需要
.map(api-> {
try {
return api.get().getRandomText());
}
catch (ExecutionException e) {
// TODO: return something else or throw a runtime exception
}
})
关于java - 完成 future : Unhandled exception type ExecutionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43309358/
重新安装 PhpStorm 2019.3 EAP 后,现在 gulp 任务不起作用。错误:运行“dev”时出错:java.util.concurrent.ExecutionException:com.
我在使用可调用线程时遇到问题。 这是代码片段: ExecutorService service = Executors.newFixedThreadPool(1); for(int i =0; i
我读了很多关于 ExecutorService 的文章,但我找不到做我需要的方法。 我需要一些并发线程。当它们中的任何一个抛出自定义异常时,所有剩余的任务都会被取消。 这是我所做的一个例子。该任务并发
我有一个 future 任务,它通过套接字对服务器执行一些 I/O 操作。当我使用任务的 get() 方法检索结果时,我收到 ExecutionException,但没有任何原因,即 getCause
为了加快构建速度,将 Gradle 守护程序的最大堆大小增加到 3072 MB 以上。 要在进程中运行 dex,Gradle 守护进程需要更大的堆。 为此,请在项目 gradle.properties
我正在尝试通过反射来调用方法。我试图获取的方法的签名如下: public static JPAQuery find(String query, Object... params) {...} 我使用以
当我尝试运行 HQL 查询时,出现以下异常: java.util.concurrent.ExecutionException: javax.ejb.EJBException: java.lang.Il
假设我有一个类定义了一大块要完成的工作,它可以产生几个检查异常。 class WorkerClass{ public Output work(Input input) throws Invali
我有一个方法可以超时执行某些任务。我使用 ExecutorServer.submit() 来获取 Future 对象,然后我调用 future.get() 并超时。这工作正常,但我的问题是处理我的任务
我的主类中有这段代码: public class vurlDownloader extends AsyncTask { @Override protected String doI
java.util.concurrent.ExecutionException错误信息,这里给出解决方案,大家根据具体要求更改。 ?
我正在开发一个应用程序,但是如果我要编译一个签名的APK,它会崩溃并出现ExecutionException错误。我相信它与我提供的图像有关,但我不知道为什么。图像的分辨率为3863x993px。目前
我是 Java 多线程新手,正在尝试使用 Callable 接口(interface)和 Future 类创建一个 Spring 项目。 我正在获取 dynamo 数据库中的所有记录,并且对于每条记录
我在 Ubuntu 14.0.4 (amd64)、Maven 3.0.5、Java Oracle 1.7.0_72 上使用 Intellij 13.1.5 我在使用 Intellij 时注意到 Mav
我在 Google Play Android Vitals 上看到了一些来自以下代码的崩溃报告: val currentUser = auth.currentUser if (
您好,我正在尝试运行包含示例 hello world web 服务的 JAX-RS Web 服务 项目,但是在 Tomcat Server 7.0 中发布它会显示以下错误。 下面是来自 eclipse
我在 Vaadin 项目中看到了这个异常。但是,功能并没有真正中断。 run() 方法中的代码执行了它想要完成的操作,但是出现了这个异常。 E 140619 124701.131 [Thread-2]
一个简单的测试... import org.junit.Test class KotlinUnitTest { @Test fun test() { assert(tr
我发布了一个关于暴力破解的问题 CodeReview ,一个好expert通过建议我应该使用多线程来提高程序速度来帮助我。他给出的代码很好,提高了速度,但对我来说仍然很慢,所以我去研究更多关于多线程的
我正在尝试探索 Java8 中的 CompletableFuture,我编写了这个简单的示例来使用假 api,但我收到了此编译错误,我在该代码周围添加了 try/catch block ,但我仍然得到
我是一名优秀的程序员,十分优秀!