美文网首页
<--个人成长笔记系列-->知识点解析之synchronized

<--个人成长笔记系列-->知识点解析之synchronized

作者: 天痕丿泪倾城 | 来源:发表于2019-10-08 16:12 被阅读0次

JAVA知识点:

    (掌握)StringBuilder、StringBuffer  和 String

StringBuilder:非线程安全,执行效率高,适用于--单线程操作字符串缓冲区下操作大量数据

StringBuffer:线程那全,执行效率低(所有方法都加上了“synchronized”关键字),适用于--多线程操作字符串缓冲区下操作大量数据

String:每次处理对象,都需要在栈内开辟新空间,且使用后,原空间没有了指向关系,被丢弃,大量浪费了内存资源,适用于--操作少量的数据时

掘金相关文章讲解:StringBuilder为什么线程不安全https://juejin.im/post/5d6228046fb9a06add4e37fe

    (掌握)synchronized:

同步锁-->

1、对象锁(将关键词加在方法上,作用范围是当前对象),如public synchronized void Demo(){}

    同步方法(对象锁)通过ACC_SYNCHRONIZED关键字隐式的对方法进行加锁。当线程要执行的方法被标注上ACC_SYNCHRONIZED时,需要先获得锁才能执行该方法。

2、类锁(全局锁,将关键词加在代码块上),如public void Demo(){synchronized (类名.Class){}}

    同步代码块(类锁)通过monitorenter和monitorexit执行来进行加锁。当线程执行到monitorenter的时候要先获得所锁,才能执行后面的方法。当线程执行到monitorexit的时候则要释放锁。每个对象自身维护这一个被加锁次数的计数器,当计数器数字为0时表示可以被任意线程获得锁。当计数器不为0时,只有获得锁的线程才能再次获得锁。即可重入锁。

CSDN相关文章讲解Synchronized、Lock和Atomic性能测试https://blog.csdn.net/minaki_/article/details/88810301

JDK1.6后,对synchronized进行优化,分成四种锁状态:无锁状态、偏向锁、轻量级锁、重量级锁

其中偏向锁默认开启,可以通过UseBiasedLocking进行控制偏向锁的开启和关闭

后三种锁,是在特定条件下,进行升级操作:多线程 访问 偏向锁,判断当存在锁竞争时,升级为轻量级锁,再次判断存在锁竞争时,然后发生锁膨胀,升级为重量级锁

相关文章

网友评论

      本文标题:<--个人成长笔记系列-->知识点解析之synchronized

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