java 线程问题 请高手帮帮忙

wangbo1204 2008-04-23 06:00:42
请问;
public synchronized void increment()
{
lock.lock();
try
{
p.incrementX();
}
finally
{
lock.unlock();
}
}
请问:
synchronized不是已经声明increment()方法为同步的吗 怎么还要用lock.lock();呢 这不是重复了吗
请帮忙详细解答一下
谢谢
...全文
86 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ROBINAPOLLO 2008-04-24
  • 打赏
  • 举报
回复
加上LOCK,,是为了解决同步时候,,相同优先级别的线程对资源的索取,,而造成死锁现象...
kekeemx 2008-04-24
  • 打赏
  • 举报
回复
看这个代码...嗯.估计可能某些地方需要注意一下死锁的情况.
因为需要2个锁才能运行,楼主要小心一点了
fire14_34 2008-04-24
  • 打赏
  • 举报
回复
学习了
老紫竹 2008-04-24
  • 打赏
  • 举报
回复
synchronized

保证了其它线程不会在这个方法完成前,使用这个方法,也就是独享这个方法,直到完成

lock

你这个方法可能需要某个锁,来保证某些资源不会出现死锁。
比如,你需要A,B2个锁,而,A此时在另一个线程被占用了,你则只能等待了。直到另一个线程释放了A锁!
jimeshengxian 2008-04-23
  • 打赏
  • 举报
回复
学习了
云上飞翔 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangbo1204 的帖子:]
请问;
public synchronized void increment()
{
lock.lock();
try
{
p.incrementX();
}
finally
{
lock.unlock();
}
}
请问:
synchronized不是已经声明increment()方法为同步的吗 怎么还要用lock.lock();呢 这不是重复了吗
请帮忙详细解答一下
谢谢
[/Quote]
答:这段代码表示:p.incrementX(); 这个方法调用必须要“同时”拥有两把锁才能执行:一把是:this这个对象的锁,另一把是lock这个对象的锁(因为我“猜测”:lock.lock()方法很可能是对lock对象加锁)。
以上仅供你参考
Shine_Panda 2008-04-23
  • 打赏
  • 举报
回复
而 public synchronized void increment() 是方法的同步.
lock 是对象的锁.
假设两个线程.通过不同的锁来访问同步方法.
那么同步方法是可以执行的.
同步方法默认情况下是用 this 作为他的锁.
所以在这种情况下 lock () 是没有必要的.
但是 你的程序中 有一个lock 对象 想必你 lock 应该
是你前面代码中某个类的对象.
这是 你用 lock 来做为锁的话
我可以
Lock lock1 = new Lock();
Lock lock2= new Lock();
那么我用lock1 和 lock2 作为锁的话
那么你的同步方法就无法保证我的对象是同一个对象.
所以就必须把你的当前同步的对象锁定.
也就是 lock 方法

同步的时候一定要注意保证锁的唯一性.

62,623

社区成员

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

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