【发布时间】:2019-04-14 17:01:58
【问题描述】:
我用 Java 编写了一个程序,在 for 循环中打印 100 万。
for (int i =0;i<1000000;i++){
System.out.println(i);
}
花了大约7.5 seconds。
我用Java写了一个自定义类,实现Runnable接口,它以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 个数字块来打印,所以最后我得到了所有的 10 hundred thousands 打印(不一定按顺序),但它需要大约 9.5 秒。
2 seconds delay 的原因是什么?这是因为线程之间发生了时间切片和上下文切换吗?我正在执行一个 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
【问题讨论】:
-
我的第一个猜测是一次锁定多个线程以尝试执行输出。但是,这并不是一个真正合适的基准。
-
System.out.println是线程安全的,因此您的所有线程都在不断争用。 -
@JacobG。所以它会导致延迟,因为它允许一个线程一次使用它?
-
@DanyalSandeelo 我会说是的,因为在给定时间只能打印一个线程。我假设同步开销是导致延迟的原因。
-
欢迎您随时乐于提供帮助,无论以何种方式提供帮助 ;-)
标签: java multithreading