我想我只是没有看到一些东西,因为我已经得到了这个工作在过去。ReentrantLock.tryLock()没有锁定
我的锁没有持有独占锁,并且当创建对象的新实例时,tryLock
返回true,并且计划另一个TimerTask
。
public class A {
private static Timer timer = new Timer();
private static Lock clean_lock = new ReentrantLock();
private static ConcurrentHashMap<String,B> _b_dict = new ConcurrentHashmap<String,B>();
public A() {
if(clean_lock.tryLock()) {
timer.scheduleAtFixedRate(new TimerTaskThread(), new Date(), 60000);
}
}
//Various NON static methods
// use an iterator at one point so they must be NON static
class TimerTaskThread extends TimerTask {
public void run() {
//delete old stuff in _b_dict
}
}
}
//sample usage
public class Main {
public Main() {
A a = new A();
a.contains(new B());
}
}
为什么你需要一个锁?为什么不在静态块中初始化静态值?我看不到它会创建第二个任务。 – 2012-01-12 15:25:56
它真的看起来像那样吗?你永远不会用'clean_lock.unlock()'释放锁吗? – 2012-01-12 15:26:15
@JohnVint我相信这是它只能创造一个任务。 – 2012-01-12 15:27:21