请问;
public synchronized void increment()
{
lock.lock();
try
{
p.incrementX();
}
finally
{
lock.unlock();
}
}
请问:
synchronized不是已经声明increment()方法为同步的吗 怎么还要用lock.lock();呢 这不是重复了吗
请帮忙详细解答一下
谢谢
public synchronized void increment()
{
lock.lock();
try
{
p.incrementX();
}
finally
{
lock.unlock();
}
}
请问:
synchronized不是已经声明increment()方法为同步的吗 怎么还要用lock.lock();呢 这不是重复了吗
请帮忙详细解答一下
谢谢
lock 是对象的锁.
假设两个线程.通过不同的锁来访问同步方法.
那么同步方法是可以执行的.
同步方法默认情况下是用 this 作为他的锁.
所以在这种情况下 lock () 是没有必要的.
但是 你的程序中 有一个lock 对象 想必你 lock 应该
是你前面代码中某个类的对象.
这是 你用 lock 来做为锁的话
我可以
Lock lock1 = new Lock();
Lock lock2= new Lock();
那么我用lock1 和 lock2 作为锁的话
那么你的同步方法就无法保证我的对象是同一个对象.
所以就必须把你的当前同步的对象锁定.
也就是 lock 方法同步的时候一定要注意保证锁的唯一性.
以上仅供你参考
比如,你需要A,B2个锁,而,A此时在另一个线程被占用了,你则只能等待了。直到另一个线程释放了A锁!