第二次:
第三次:
这里就有意思了,加了锁的运行时间居然比不加锁的运行时间还少?是不是觉得有点不可思议了?其实这个也不难理解,这里就要牵扯到cpu缓存以及缓存与内存的回写机制了,感兴趣的小伙伴可以自行百度,今天的重点不在这里。
第二种:三个线程使用同一把锁
改造代码,去掉add方法的synchronized关键字,将synchronized写在add方法内,新建一把钥匙(成员变量:lock),让三个累加都累加操作使用这把钥匙,代码如下:
package com.ymy.test;
public class CASTest {
private static long count = 0;
private static final String lock = “lock”;
/**
- 累加10w
*/
private static void add() {
synchronized(lock){
for (int i = 0; i < 100000; ++i) {
count += 1;
}
}
}
public static void main(String[] args) throws InterruptedException {
//开启三个线程 t1 t2 t3
Thread t1 = new Thread(() -> {
add();
});
Thread t2 = new Thread(() -> {
add();
});
Thread t3 = new Thread(() -> {
add();
});
long starTime = System.currentTimeMillis();
//启动三个线程
t1.start();
t2.start();
t3.start();
//让线程同步
t1.join();
t2.join();
t3.join();
long endTime = System.currentTimeMillis();</