用 CountDownLatch 来写个程序算 1!+2!+3!+4!+5!

发布于 2024-01-11 22:12:52 字数 1333 浏览 18 评论 0

你可以使用 CountDownLatch 和线程来实现这个程序,以下是一个例子:

import java.util.concurrent.CountDownLatch;

public class FactorialSum {
    private static final int N = 5; // 通过计算 1!到 5!

    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(N);
        long sum = 0;

        for (int i = 1; i <= N; i++) {
            int finalI = i;
            new Thread(() -> {
                long factorial = calculateFactorial(finalI);
                sum += factorial;
                latch.countDown();
            }).start();
        }

        try {
            latch.await(); // 等待所有线程执行完毕
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Sum of factorials: " + sum);
    }

    private static long calculateFactorial(int n) {
        long factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial *= i;
        }
        return factorial;
    }
}

在这个例子中,我们创建了一个 CountDownLatch 对象,并将计数器的初始值设置为 N。然后,在一个循环中创建 N 个线程来计算 1!到 5!的阶乘。每个线程计算完阶乘后,都会调用 latch.countDown() 来减少计数器的值。主线程调用 latch.await() 来等待所有线程执行完毕。当计数器值减少到 0 时,主线程继续执行,打印出阶乘的和。

请注意,由于使用了线程,计算结果的顺序可能会不同。如果需要保持顺序,你可以使用 ExecutorService 来控制线程的执行顺序。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

新人笑

文章 0 评论 0

mb_vYjKhcd3

文章 0 评论 0

小高

文章 0 评论 0

来日方长

文章 0 评论 0

哄哄

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文