,把注释放开,就会有序,而且保证线程加减前后相差是1.运行结果如下所示
11前...0
11后...1
13前...1
13后...2
14前...2
14后...3
12前...3
12后...4
15...线程获取不到锁,就会被阻塞挂起,等其他线程释放锁的时候,才被唤醒起来。线程挂起和唤醒是需要转入到内核态完成的,这些操作对系统的并发性能会带来影响。...其实有时候线程虽然没法立刻获取到锁,但是也可能很快就会获取到锁。JVM采用了一种叫自旋锁的机制,让获取不到锁的线程执行一个空的循环,一段时间后,如果还是没法获取锁,线程才会被挂起。...先决条件是当前节点有限次尝试获取锁失败。
公平锁和非公平锁在说的获取上都使用到了 volatile 关键字修饰的state字段, 这是保证多线程环境下锁的获取与否的核心。...互斥锁
保证在同一时刻只有一个线程对其进行操作。比如最常见的 synchronized。
参考文献
Java中的公平锁和非公平锁实现详解