【发布时间】:2015-12-19 01:02:33
【问题描述】:
我有一个名为 processOutbox 的方法。我希望它是线程安全的。我不希望另一个线程在有一个线程时调用此方法。我已经通过以下方式实现了它。我做对了吗?我的执行过程中是否存在任何漏洞?如果有的话,请告诉我如何解决它。
this.start();
outboxLock.lock();
timer = new Timer();
try{
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
processOutbox();
}
}, 0, period);
} finally{
outboxLock.unlock();
}
【问题讨论】:
-
您只锁定了日程安排。执行仍然不是线程安全的。
-
那我该怎么做呢?请指教。
-
我建议在类级别的静态变量上同步它。
-
@NamanGala 所以我已经删除了我的问题中的实现。我刚刚使我的方法同步。我应该接受以下答案作为答案吗?
-
使用单线程
ScheduledExecutorService。
标签: java multithreading timer locking reentrantlock