答案当然是否定的,我们可以先来看一下下面这个程序
package com;
/**
* @author
* @description 多线程的测试
* @data 2022/2/10
*/
public class ConcurrencyTest {
private static final long count = 10000l;
public static void main(String[] args) throws InterruptedException {
concurrency();
serial();
}
private static void concurrency() throws InterruptedException {
long start = System.currentTimeMillis();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int a = 0;
for (long i = 0; i < count; i++) {
a += 5;
}
}
});
thread.start();
int b = 0;
for (long i = 0; i < count; i++) {
b--;
}
long time = System.currentTimeMillis() - start;
thread.join();
System.out.println("concurrency :" + time+"ms,b="+b);
}
private static void serial() {
long start = System.currentTimeMillis();
int a = 0;
for (long i = 0; i < count; i++) {
a += 5;
}
int b = 0;
for (long i = 0; i < count; i++) {
b--;
}
long time = System.currentTimeMillis() - start;
System.out.println("serial:" + time+"ms,b="+b+",a="+a);
}
}
输出的结果如下
从这里可以看出来多线程不一定比单线程快的
从表中可以发现,当并发执行累加操作不超过百万次时,速度会比串行执行累加操作要 慢。那么,为什么并发执行的速度会比串行慢呢?这是因为线程有创建和上下文切换的开销。