Chr*_*ris 3 java concurrency multithreading
我想我过去没有看到过这样的事情.
我的锁没有持有独占锁,当创建对象的新实例时,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());
}
}
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 10
你是A从另一个线程创建另一个实例?因为如果你从同一个线程创建两个实例,那么,锁是可重入的,tryLock显然会返回true.
如果您真的想要从构造函数而不是静态块进行调度,则应该使用静态AtomicBoolean变量,并且仅在compareAndSet(false, true)返回true时调度计时器.
| 归档时间: |
|
| 查看次数: |
2920 次 |
| 最近记录: |