我的理解是在单核CPU上,通过多线程并发在某些情况下可以加快执行速度。
这在并发的线程类型不同时或者线程同时处理多种类型的任务时很容易理解,因为这样提高了系统的资源利用率。
但是对于某些任务应该是不可以的,比如纯计算型任务,并发执行应该没有串行执行速度块。
比如下面这个任务:
import java.lang.Thread;
public class JavaTest {
private static final long count = 100000000l;
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;
}
System.out.println(a);
}
});
thread.start();
int b = 0;
for (long i = 0; i < count; i++) {
b--;
}
thread.join();
long time = System.currentTimeMillis() - start;
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);
}
}