多线程同步的问题

webwing 2002-08-23 09:29:08
类LockManager的实例将在多线程中被引用,
其中包含名为lock的方法,分别以如下几种
方式实现,有何不同,那种执行效率最高。

public class LockManager{
private HashMap locked;

public void lock(int recordID){
......................
}
}

1.
public synchronized void lock(int recordID){
......................
}

2.
public void lock(int recordID){
synchronized(this){
......................
}
}

3.
public void lock(int recordID){
synchronized(locked){
.......................
}
}
...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
远太狼 2002-08-23
  • 打赏
  • 举报
回复
binriyue(日月)
>> 1是指同步是的方法lock,即这个方法在某个时刻只有线程实例能调用。
java中没有同步方法,1是2的简写。

所以1和2都是拥有this的Monitor,3是有locked的Monitor。

执行效率应该是3高
webwing 2002-08-23
  • 打赏
  • 举报
回复
在1, 2, 3三种方法的同步代码中,他们拥有哪些对象的Monitor,
也就是说可以调用如下哪些选择。

A.this.wait()
B.Thread.currentThread().wait();
C.locked.wait();
ChDw 2002-08-23
  • 打赏
  • 举报
回复
我觉得1.2的效率应该相当的,不会有太大的偏差

至于3,那可能需要看这个LockManager里面的其他方法了
因为3没有取得LockManager的同步锁反而是取得locked的同步锁
如果LockManager中有不少方法是不需要得到locked的同步锁的
那么应该是3在多线程中效率更高
binriyue 2002-08-23
  • 打赏
  • 举报
回复
其中1是指同步是的方法lock,即这个方法在某个时刻只有线程实例能调用。
2、 synchronized(this){
......................
}表示执行这段代码时,所有LockManager的实例都被锁定,将不能再被其它地方调用,其直到解锁,

3、synchronized(locked)在执行同步代码时,只是锁定locked。

下面是英文解释:
synchronized (ObjectReference) { /* Block body */ }
When a synchronized block is executed, its object is locked and it cannot be called by any other code until the lock is freed。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧