有时并发代码确实可能比顺序代码慢,这可能是由于后者的内存访问模式更好。解决方法是优化并发代码以最大程度地利用多个处理器核心。例如,使用锁来避免竞争条件,使用线程池来避免线程创建和销毁的成本,并使用异步编程API来减少阻塞和等待时间。以下是一个范例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ConcurrentVsSequential {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
sequentialTask();
long endTime = System.currentTimeMillis();
System.out.println("Sequential Time Taken: " + (endTime - startTime) + "ms");
startTime = System.currentTimeMillis();
concurrentTask();
endTime = System.currentTimeMillis();
System.out.println("Concurrent Time Taken: " + (endTime - startTime) + "ms");
}
private static void sequentialTask() {
for (int i = 0; i < 10_000_000; i++) {
Math.sqrt(i);
}
}
private static void concurrentTask() {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10_000_000; i++) {
executorService.execute(() -> Math.sqrt(i));
}
executorService.shutdown();
}
}