gpt4 book ai didi

java - 多线程延迟的原因

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

我用 Java 编写了一个程序,在 for 循环中打印 100 万。

for (int i =0;i<1000000;i++){
System.out.println(i);
}

大约花了7.5秒

我用Java编写了一个自定义类,它实现了Runnable接口(interface),它以2个参数为限制来打印2个值之间的值。

public class ThreadCustom implements  Runnable {

int start;
int end;
String name;


ThreadCustom(int start, int end, String name){
this.start = start;
this.end = end;
this.name = name;

}
@Override
public void run() {
for(int i =start; i<=end;i++){
System.out.println(i);
}
}
}

我创建了我的自定义线程类的 10 个对象,为每个对象分配了 100k 数字 block 来打印,所以最后我得到了所有的 100000 打印(不是绝对按顺序)但它大约需要 9.5 秒。

延迟 2 秒的原因是什么?这是因为线程之间发生的时间切片和上下文切换吗?我正在执行一个 java 进程,它生成 10 个线程。我的思考方向正确吗?

更新:评论了System.out.println以查看它在迭代时的执行情况。

没有线程的打印时间

2019-04-14 22:18:07.111   // start
2019-04-14 22:18:07.116 // end

使用ThreadCustom类:

2019-04-14 22:26:42.339
2019-04-14 22:26:42.341

最佳答案

额外的时间花在两个方面:1) 设置每个线程执行上下文所涉及的开销2) 可能出现的情况是您生成的线程多于主处理器中可用的逻辑处理器

由于增加循环和打印整数所需的处理量很小,因此在大多数情况下,这会导致并行环境中的性能下降。

但是,如果您要在每次迭代期间对任何给定图像上的不同像素颜色进行计数之类的操作,那么使用多个线程时您会看到显着的性能优势。

关于java - 多线程延迟的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55677855/

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