如果我在 Java 中创建另一个线程,为什么不会抛出异常?

Why the exception is not thrown if I create another thread in Java?

提问人:elvis 提问时间:3/21/2023 更新时间:3/21/2023 访问量:44

问:

我有一段代码,其中抛出异常。twitter4j 库中的 createStatus 方法抛出 TwitterException,它扩展了 Exception,因此它是一个选中的异常。

private void simulateTwitterStream(
        String[] keywords, int minTweetLength, int maxTweetLength, long sleepTimeMs) throws TwitterException {

        while (true) {
            String formattedTweetAsRawJson = getFormattedTeet(keywords, minTweetLength, maxTweetLength);
            Status status = TwitterObjectFactory.createStatus(formattedTweetAsRawJson);
            twitterKafkaStatusListener.onStatus(status);
            sleep(sleepTimeMs);
        }
}

之后,我在另一个线程中实现了while循环,如下所示:

private void simulateTwitterStream(
        String[] keywords, int minTweetLength, int maxTweetLength, long sleepTimeMs) {

    Executors.newSingleThreadExecutor().submit(() -> {
        while (true) {
            String formattedTweetAsRawJson = getFormattedTeet(keywords, minTweetLength, maxTweetLength);
            Status status = TwitterObjectFactory.createStatus(formattedTweetAsRawJson);
            twitterKafkaStatusListener.onStatus(status);
            sleep(sleepTimeMs);
        }
    });
}

但在这种情况下,我不需要在方法签名处使用throws TwitterException。有人可以解释一下为什么我不需要使用 throws TwitterException 吗?

谢谢

Java 多线程 异常 java-threads

评论

1赞 luk2302 3/21/2023
因为您的方法不再引发异常。在将来任何时间点可能运行也可能不运行的线程可能会遇到该异常,但该异常不再与您的 .simulateTwitterStream
3赞 khelwood 3/21/2023
您的代码现在位于 Callable 中,该 Callable 声明它可以引发异常。可调用#call
0赞 elvis 3/21/2023
@khelwood谢谢!但是,如果代码来自可以抛出 Exception 的 call(),那么谁来捕获它呢?
1赞 khelwood 3/21/2023
@elvis 这不是你的方法的问题,因为你的方法不执行 Callable:这是 的问题。Executor

答: 暂无答案