最近在项目中设计业务请求逻辑这一块,运用到了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非公平(多个线程强一个钥匙)。