使用synchronized锁
package com.ysf;
public class Tst02AtomicSync {
private static int count = 0;
public static void increment() {
synchronized (Tst02AtomicSync.class) {
count++;
}
try {
Thread.sleep(10L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 100; i++) {
increment();
}
}, "plus-1");
Thread t2 = new Thread(() -> {
for (int i = 0; i < 100; i++) {
increment();
}
}, "plus-2");
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(count);
}
}
public static void increment();
descriptor: ()V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=2, args_size=0
0: ldc
2: dup
3: astore_0
4: monitorenter
5: getstatic
8: iconst_1
9: iadd
10: putstatic #3
13: aload_0
14: monitorexit
- synchronized 破坏了多线程操作临界资源的特性,保证同一时间下,只有一个线程可以获取到临界资源进行操作