注:颜色和排版没有实际意义,纯粹为了好看。
1、Synchronized原理讲下:
1、Synchronized是由JVM 实现的一种实现互斥同步的一种方式,如果你查看被Synchronized修饰过 的程序块编译后的字节码,会发现,被Synchronized修饰过 的程序块,在 编译前后被编译器生成了monitorenter和monitorexit两个字节码指令。
2、这两 个指令是什么意思呢?在虛拟机执行到monitorenter指令时,首先要尝试获取对象的锁:如果这个对象没有锁定,或者当前线程已经拥有了这个对 象的锁,把锁的计数器+ 1;当执行monitorexit指令时将锁计数器-1;当计 数器为0时,锁就被释放了。如果获取对象失败了,那当前线程就要阻塞 等待,直到对象锁被另外一个线程释放为止。Java中Synchronize通过在对 象头设置标记,达到了获取锁和释放锁的目的。
2、对象锁是什么?如何确定对象锁
3、什么是可重入锁?为何说Synchronized
4、JVM对java的原生锁做了哪些优化
5、为何说Synchronized是非公平锁
6、什么是消除锁和粗化锁
7、为什么说Synchronized是悲观锁?乐观锁的实现原理又是什么?什么是CAS,有什么特性?
8、乐观锁一定是好的吗?
9、跟Synchronized想比,可重入锁ReentrantLock 其实现原理
10、聊下AQS框架
11、Synchronized 和 ReentrantLock 的异同
12、ReentrantLock如何实现可重入性
13、除了ReentrantLock,你还接触过JUC哪些并发工具?
请谈谈 ReadWriteLock 和 StampedLock
public class RWSample {
private final Map<String, String> m = new TreeMap<> ( );
private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock ( );
private final Lock r = rwl.readLock ( );
private final Lock w = rwl.writeLock ( );
public String get(String key) {
r.lock ( );
System.out.println ("读锁锁定! ");
try {
return m.get (key);
} finally {
r.unlock ( );
}
}
public String put(String key, String entry) {
w.lock ( );
System.out.println ("写锁锁定");
try {
return m.put (key, entry);
} finally {
w.unlock ( );
}
}
}
思绪中。。。。。。。。。。。。。。。。。。。。。。。
思绪中。。。。。。。。。。。。。。。。。。。。。。。