在执行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()
的内容。