java 效率低_Java中效率低下的线程

博主在Core i5双核四线程处理器上发现,使用Java的ThreadPool执行四个相同任务时,无论设置1个工作线程还是4个工作线程,计算时间都是5700毫秒。尽管CPU使用率达到100%,但期望的性能提升并未实现。问题可能涉及任务粒度、上下文切换开销等因素。代码示例展示了简单的数学运算任务。
摘要由CSDN通过智能技术生成

我目前遇到一些问题,以了解为什么在某些情况下Java中的并行化似乎效率低下。在下面的代码中,我构建了4个使用ThreadPool执行的相同任务。

在我的Core

i5(2核,4线程)上,如果将工作程序数设置为1,则计算机需要大约5700毫秒,并使用25%的处理器。如果将工作程序数量设置为4,则可以观察到100%的CPU使用率,但是…计算时间是相同的:5700ms,而我希望它可以减少4倍。

为什么?正常吗

(当然,我的实际任务更加复杂,但是该示例似乎可以重现该问题)。预先感谢您的回答。

这是代码:

public class Test {

public static void main(String[] args) {

int nb_workers=1;

ExecutorService executor=Executors.newFixedThreadPool(nb_workers);

long tic=System.currentTimeMillis();

for(int i=0; i<4;i++){

WorkerTest wt=new WorkerTest();

executor.execute(wt);

}

executor.shutdown();

try {

executor.awaitTermination(1000, TimeUnit.SECONDS);

} catch (InterruptedException e) {e.printStackTrace();}

System.out.println(System.currentTimeMillis()-tic);

}

public static class WorkerTest implements Runnable {

@Override

public void run() {

double[] array=new double[10000000];

for (int i=0;i

array[i]=Math.tanh(Math.random());

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值