Java Monitor、Synchronized简单分析

monitor概念:

monitor是Java中实现synchronized关键字的基础,可以将它理解为一个监听器,是用来实现同步的工具,monitor与每一个Java对象与class字节码相关联。

**

Synchronized

Synchronized是Java提供的内置锁机制,synchronized关键字可以实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象对多个线程是可见的,那么对该对象的所有读和写都将通过同步的方式来进行。
synchronized利用monitor来获得锁与释放锁,它包括monitor enter和monitor exit两个JVM指令,一个monitor exit指令之前都必须有一个monitor enter。

synchronized的用法:

synchronized可以用于对代码块或方法进行修饰,而不能够用于对class以及变量进行修饰。
注意事项:
1.与monitor关联的对象不能为空,每一个对象和monitor关联,如果对象为null,则monitor也无从谈起。
2.synchronized作用域太大,作用域太大,则代表其效率越低,甚至还会丧失并发的优势。
3.不同monitor企图锁相同的方法,线程之间进行monitor lock的争抢只能发生在与monitor关联的同一个引用上。
4.多个锁的交叉导致死锁

wait()、notify():

1.wait()是可中断方法,当前线程一旦调用wait方法进入阻塞状态,其他线程可以使用interrupt方法将其打断。
2.线程执行了某个对象的wait方法后,会加入与之对应的wait set,每一个对象的monitor都有一个与之对应的wait set(wait set的具体结构与弹出选择与不同的JDK有关)
3.必须在同步方法中使用wait、notify,因为执行wait、notify 的前提是必须持有同步方法的monitor所有权
4.同步方法的monitor必须与执行wait、notify方法的对象一致,用哪个对象的monitor进行同步,就只能用哪个对象进行wait和notify操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值