thread中sleep和wait方法的区别,以及lock和synchronized的区别

最近在项目中设计业务请求逻辑这一块,运用到了thread的一些知识,所以就又去特定的研究了一下!

首先 sleep和wait的区别:

1、我们通过查看源码得知,sleep是Threa的静态方法,而wait方法是Object的成员方法;

2、sleep没有synchnorized关键字也会运行,而wait方法必须要在synchnorized的作用域及临界区下运行,否则就会报IllegalMonitorStateException 异常,就是非法监控状态异常!

3、然后我们通过debug不难发现,sleep方法不会释放共享资源的锁,而wait方法会释放共享资源的锁!

当我们使用利用到线程知识的时候,必然会涉及到线程同步,那就必然会用到lock和Synchnorized两种锁!那就必然涉及的两折的区别,今天就简单给大家说下两者的之间的区别,以下只是自己的一点拙见,仅供大家看看参考!

lock和Synchnorized的区别:

1、lock是对象级别的锁(也叫程序级别的锁),可以自己定义锁,自己创建对象(如:Lock lock = new ReentrantLock(true),然后创建Condition con = lock.newCondition();true这个参数代表公平锁:就是哪个线程等的时间长就让谁进入;condition这个是lock的一个封装类,里面封装了await()和sigalAll()方法,和lock锁配套使用)可以自己开、解锁;而synchronized是jvm级别的锁,我们无法把控!

2:lock是公平锁,就是由等待时间最长的线程先进入共享资源,而synchnorized非公平(多个线程强一个钥匙)。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值