多线程如何在java中使用多核?
我试图理解java线程是如何与CPU内核一起工作的。我有一个4核CPU,当我尝试运行下面的代码时,执行时间很有趣。为什么多线程不能加速?我做错什么了吗
顺便说一下,availableProcessors()返回4
下面的代码需要将近27秒
Runnable runnable = new Runnable() {
@Override
public void run() {
int x = 0;
while(x < 10000000){
System.out.println(x);
x++;
}
}
};
Thread t1 = new Thread(runnable);
t1.start();
当我使用多线程时,需要33秒
Runnable runnable = new Runnable() {
@Override
public void run() {
int x = 0;
while(x < 5000000){
System.out.println(x);
x++;
}
}
};
Runnable runnable2 = new Runnable() {
@Override
public void run() {
int x = 5000000;
while(x < 10000000){
System.out.println(x);
x++;
}
}
};
Thread t1 = new Thread(runnable);
t1.start();
Thread t2 = new Thread(runnable2);
t2.start();
# 1 楼答案
您的程序有一个顺序瓶颈,正在打印到终端
System.out.println
中有一个同步块,因此每次写入一个,因此代码不是并行的程序的顺序部分(包括协调)是根据Amdahl's law控制其性能的部分