synchronized
在多线程并发编程中synchronized一直是元老级角色,很多人都会称呼它为重量级锁。但是,随着Java SE 1.6对 synchronized进行了各种优化之后,有些情况下它就并不那么重了,Java SE 1.6中为了减少获得锁和释放锁带来的 性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。我们仍然沿用前面使用的案例,然后通过 synchronized关键字来修饰在inc的方法上。再看看执行结果。
public class SynchronizedDemo2 {
private static int count = 0;
public static void inc() {
synchronized (SynchronizedDemo2.class) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
}
}
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 1000; i++) {
new Thread(() -> SynchronizedDemo2.inc()).start();
}
Thread.sleep(3000);
System.out.println("运行结果" + count);
}
}
字节码
//这里只贴出了方法inc那部分
public static void inc();
descriptor: ()V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=3, args_size=0
0: ldc #2 // class com/gh/test/concurrent/synchronizedDemo/SynchronizedDemo2
2: dup
3: a