Fil*_*lve 0 java performance multithreading
我开始为 Java 中已经存在的项目(非多线程项目)开发一些多线程平台,我需要性能增益,减少整个项目中复杂计算的时间。
我一直在使用 Executors,但我真的不知道与 ThreadGroup 或纯 Runnable 相比,它是否是提高性能的最佳解决方案。
那么,应该使用哪一种呢?
如果您将线程池重用于多个计算(即,您启动一个具有 10 个线程的池并执行 100 次任务 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.
Run Code Online (Sandbox Code Playgroud)
在这种情况下,一开始我只支付启动 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();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我支付了两次启动 10 个线程的开销,这是对线程的错误使用。当然,如果你只需要执行一次这些任务,不会有任何性能差异,只是与执行器一起工作更容易。
我不明白你所说的纯Runnable(可能是纯线程?)的意思,因为线程池(执行器)也适用于Runnables。
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |