【发布时间】:2014-09-25 04:44:21
【问题描述】:
使用 synchronized(intrinsic locking) 关键字进行锁定,我们可以这样做:
public void addSum(int a) {
synchronized(q) {
q.add(a); // q is say a Queue
}
}
在上面的代码中,当一个对象试图调用 addSum() 方法,即 x.addSum(10) 时,锁将被保持在 'q' 而不是 x。所以使用同步我们可以锁定一个不是实际调用对象(类)的对象。
下面我使用的是 java concurrent 包中的 Lock,有没有办法指定应该锁定哪个对象(即在上面的代码 sn-p 中使用同步它指定了锁定/同步应该打开'q')。但是下面当我使用锁时,我没有指定锁应该在哪个对象上。能做到吗?
public void addSum(int a) {
lock.tryLock();
q.add(a);
lock.unlock();
}
我确实提到了 - http://docs.oracle.com/javase/tutorial/essential/concurrency/newlocks.html。但是正在寻找更小的例子来清除我的概念。
【问题讨论】:
标签: java multithreading concurrency