在执行Java计时器时防止争用条件
我有一个方法在执行Java计时器时防止争用条件,java,multithreading,timer,race-condition,critical-section,Java,Multithreading,Timer,Race Condition,Critical Section,我有一个方法foo(),它通过多个线程被多次调用。方法内部是关键部分 private Object syncObject = new Object(); private Timer batchingTimer; private TimerTask batchingAction; public void foo() { synchronized(syncObject) { batchingTimer = new Timer(); batchingAct
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()方法内部运行,也在计时器内部运行。此方法有时面临竞争条件(用于运行Action方法的Java定时器类创建一个新线程)。
在这种情况下,我如何防止竞争条件?请遵循Java教程中关于同步b()
的内容。请遵循Java教程中关于同步b()
的内容。