美文网首页
synchronized关键字(三)

synchronized关键字(三)

作者: AD刘涛 | 来源:发表于2020-03-14 16:18 被阅读0次

    可重入原理(通过加锁计数器实现)

    • JVM负责跟踪对象被加锁的次数
    • 线程第一次给对象加锁的时候,计数变为1。每当这个相同的线程在此对象上再次获得锁时,计数会递增。
    • 每当任务离开时,计数递减,当计数为0的时候,锁被完全释放。

    Java内存模型

    java内存模型.png

    两个线程之间如何通信呢?

    每个线程本地都有一个共享变量的副本。因为线程对性能要求很高,所以每个线程都会拷贝一份主内存数据放入自己的本地内存。如果线程之间有数据更新时,则会将本线程的变更数据写入主内存,然后另外一个线程再次读取主内存的值。

    可见性原理

    synchronized关键字是如何实现可见性

    这是因为被synchronized关键字所修饰的代码块在执行完毕后,被锁住的对象所做的任何修改,在线程释放之前,都要把线程内存的数据写入主内存。同时新的线程在进入synchronized代码块后也会到主内存读取最新的数据。

    synchronized 的缺陷

    1. 效率低:锁的释放情况少;试图获得锁时不能设定超时;不能中断一个正在试图获得锁的线程
    2. 不够灵活(读写锁更灵活):加锁与释放锁的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的。
    3. 无法知道是否成功的获取到锁

    思考?

    • synchronized关键字有哪些注意点呢 ?

      锁对象不能为空,作用域不宜过大(也就是synchronized关键字所包裹的范围),避免死锁。

    • 如何选择Locksynchronized关键字 ?

    如何反编译字节码

    1. 我们首先编写Decompilation14.java文件。
    2. 其次在命令行输入javac Decompilation14.java将java文件编译成Decompilation14.class文件。
    3. 最后通过命令javap -verbose Decompilation14.class命令就能反编译出文件

    相关文章

      网友评论

          本文标题:synchronized关键字(三)

          本文链接:https://www.haomeiwen.com/subject/evyishtx.html