高并发下实现线程安全的i++操作
一、使用synchronized
这个比较简单,就是在进行i++操作时,直接使用synchronized加锁,也可以使用Lock加锁,本质都是一样的(锁原理不同),最终都是通过加锁来保证多线程安全的。
public class Synchronized_add {
int i = 0;
public synchronized void add() {
i++;
}
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
Thread[] threads = new Thread[100];
Synchronized_add v = new Synchronized_add();
CountDownLatch latch = new CountDownLatch(threads.length);
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(() -> {
try {
// 这里采用CountDownLatch阻塞,保证100个线程都启动成功了之后,多线程同时开始计算
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int n = 0; n < 1000000; n++) {
v.add();
}
});
}
for (int i = 0; i < threads.length; i++) {
threads