黑马程序员技术交流社区
标题:
synchronized和java.util.concurrent.locks.Lock的问题
[打印本页]
作者:
宗士为
时间:
2012-5-19 13:17
标题:
synchronized和java.util.concurrent.locks.Lock的问题
这个都是锁 就是不知道他们之间有什么异同点 都在什么情况下用 最好写个简单的代码我看下 求解
作者:
郭振
时间:
2012-5-19 13:34
相同点:
Locke 能实现synchronized所有功能。
不同点:
Lock有比synchronized更精确的线程和更好的性能
synchronized能够自动释放锁,但Lock不能,只能手动释放,并且在finally从句中释放
作者:
韩国军
时间:
2012-5-19 20:46
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定
要求程序员手工释放,并且必须在finally从句中释放。
synchronized 修饰方法时 表示同一个对象在不同的线程中 表现为同步队列
如果实例化不同的对象 那么synchronized就不会出现同步效果了。
1.对象的锁
所有对象都自动含有单一的锁。
JVM负责跟踪对象被加锁的次数。如果一个对象被解锁,其计数变为0。在任务(线程)第一次给对象加锁的时候,计数变为1。每当这个相同的任务(线程)在此对象上获得锁时,计数会递增。
只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁。
每当任务离开一个synchronized方法,计数递减,当计数为0的时候,锁被完全释放,此时别的任务就可以使用此资源。
2.synchronized同步块
2.1同步到单一对象锁
当使用同步块时,如果方法下的同步块都同步到一个对象上的锁,则所有的任务(线程)只能互斥的进入这些同步块。
Resource1.java演示了三个线程(包括main线程)试图进入某个类的三个不同的方法的同步块中,虽然这些同步块处在不同的方法中,但由于是同步到同一个对象(当前对象 synchronized (this)),所以对它们的方法依然是互斥的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2