gpt4 book ai didi

Java 并发时间性能 : Executors, ThreadGroup 还是 Runnable?

转载 作者:行者123 更新时间:2023-12-01 07:12:07 24 4
gpt4 key购买 nike

我开始为 Java 中已经存在的项目(非多线程项目)开发一些多线程平台,我需要性能增益,减少整个项目中复杂计算的时间。

我一直在使用 Executors,但我真的不知道与 ThreadGroup 或纯 Runnable 相比,它是否是提高性能的最佳解决方案。

那么,应该使用哪一个呢?

最佳答案

只有当您将线程池重用于多次计算时,您才会从线程池中获得性能提升(即,您启动一​​个包含 10 个线程的池并执行 10 个任务 100 次,而不是每次启动 10 个线程 100 次)。它们仍然需要初始开销来启动,你无法逃避这一部分。这是一个例子:

ExecutorService exec = Executors.newFixedThreadPool(10);

for(int i = 0; i < 10; i++) {
exec.submit(new Task(i));
}

// later

for(int i = 0; i < 10; i++) {
exec.submit(new Task(i));
}

exec.shutdown(); // etc.

在这种情况下,我只需支付一开始启动 10 个线程一次的开销。

使用纯线程:

List<Thread> threads = new ArrayList<Thread>();
for(int i = 0; i < 10; i++) {
Thread t = new Thread(new Task(i));
threads.add(t);
t.start();
}

for(Thread t: threads) {
t.join();
}

// later I need more work

threads = new ArrayList<Thread>();
for(int i = 0; i < 10; i++) {
Thread t = new Thread(new Task(i));
threads.add(t);
t.start();
}

for(Thread t: threads) {
t.join();
}

在这种情况下,我付出了两次启动 10 个线程的开销,这是对线程的错误使用。当然,如果您只需要执行这些任务一次,那么不会有任何性能差异,只是与执行器一起工作更容易。

我不明白你所说的纯Runnable是什么意思(也许是纯线程?),因为线程池(执行器)也可以在Runnable上工作。

关于Java 并发时间性能 : Executors, ThreadGroup 还是 Runnable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197181/

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