我有一个方法foo()
,它通过多个线程多次调用。方法内部是关键部分。
private Object syncObject = new Object();
private Timer batchingTimer;
private TimerTask batchingAction;
public void foo() {
synchronized(syncObject) {
batchingTimer = new Timer();
batchingAction = new TimerTask() {
public void run() {
b();
}
};
batchingTimer.schedule(batchingAction, 1000);
a();
b();
}
}
方法b()
在foo()
方法内运行,也在计时器内运行。此方法有时会面临Race Condition(运行Action Method
的Java Timer类创建一个新线程)。
在这种情况下如何防止种族条件?