javaF面试题_NO.1——java并发编程_S

注:颜色和排版没有实际意义,纯粹为了好看。

1、Synchronized原理讲下:

1、Synchronized是由JVM 实现的一种实现互斥同步的一种方式,如果你查看被Synchronized修饰过 的程序块编译后的字节码,会发现,被Synchronized修饰过 的程序块,在 编译前后被编译器生成了monitorenter和monitorexit两个字节码指令。
2、这两 个指令是什么意思呢?在虛拟机执行到monitorenter指令时,首先要尝试获取对象的锁:如果这个对象没有锁定,或者当前线程已经拥有了这个对 象的锁,把锁的计数器+ 1;当执行monitorexit指令时将锁计数器-1;当计 数器为0时,锁就被释放了。如果获取对象失败了,那当前线程就要阻塞 等待,直到对象锁被另外一个线程释放为止。Java中Synchronize通过在对 象头设置标记,达到了获取锁和释放锁的目的。

2、对象锁是什么?如何确定对象锁

image.png

3、什么是可重入锁?为何说Synchronized

image.png

4、JVM对java的原生锁做了哪些优化

image.png

5、为何说Synchronized是非公平锁

image.png

6、什么是消除锁和粗化锁

image.png

7、为什么说Synchronized是悲观锁?乐观锁的实现原理又是什么?什么是CAS,有什么特性?

image.png

8、乐观锁一定是好的吗?

image.png

9、跟Synchronized想比,可重入锁ReentrantLock 其实现原理

xx

10、聊下AQS框架

image.png

11、Synchronized 和 ReentrantLock 的异同

image.png

12、ReentrantLock如何实现可重入性

image.png

13、除了ReentrantLock,你还接触过JUC哪些并发工具?

image.png

请谈谈 ReadWriteLock 和 StampedLock

image.png
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 ( );
        }
    }
}
image.png
思绪中。。。。。。。。。。。。。。。。。。。。。。。
image.png
思绪中。。。。。。。。。。。。。。。。。。。。。。。
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。