Synchronized关键字原理

计算机软件开发 2024-9-9 08:46:11 93 0 来自 中国
Synchronized原理是Java口试中险些百分百会问到的题目,由于没有任何写过并发步调的开发者会没听说大概没打仗过Synchronized。
Synchronized是由JVM实现的一种实现互斥同步的一种方式,假如你检察被Synchronized修饰过的步调块编译后的字节码,会发现,被Synchronized修饰过的步调块,在编译前后被编译器天生了monitorenter和monitorexit两个字节码指令。
这两个指令是什么意思呢?在虛拟机实行到monitorenter指令时,起首要实行获取对象的锁:假如这个对象没有锁定,大概当火线程已经拥有了这个对象的锁,把锁的计数器+1;当实行 monitorexit指令时将锁计数器-1;当计数器为O时,锁就被开释了。假如获取对象失败了,那当火线程就要壅闭等候,直到对象锁被别的一个线程开释为止。Java中Synchronize通过在对象头设置标记,到达了获取锁和开释锁的目标。
1. 假如Synchronized明白指定了锁对象,好比Synchronized(变量名)、Synchronized(this)等,分析加解锁对象为该对象。
2. 假如没有明白指定:
若Synchronized修饰的方法为非静态方法,表现此方法对应的对象为锁对象;
若Synchronized修饰的方法为静态方法,则表现此方法对应的类对象为锁对象;
留意,当一个对象被锁住时,对象内里全部用Synchronized修饰的方法都将产生堵塞,而对象里非Synchronized修饰的方法可正常被调用,不受锁影响。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-24 10:08, Processed in 0.168302 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表