线程安全地从另一个线程中调用TimerTask

时间:2019-11-28 23:15:05

标签: java multithreading timer thread-safety timertask

我有一个实现可运行的ABC类。 ABC运行有多个线程。在每个线程中,我想安排一个TimerTask。在TimerTask块中调用的函数必须相对于线程变量是线程安全的。

public class ABC implements Runnable {
private int abc = 0;

public void run() {

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            this.someFunc();
        }
    }, 1000, 1000);
    while (true) {
        abc = (abc + 1) % 20;
    }



}

void someFunc() {
    abc--;
}
}

此线程安全吗?还是需要使someFunc()成为同步函数?

1 个答案:

答案 0 :(得分:0)

Javadoc说:

  

公共类计时器   扩展对象

     

一种用于线程安排任务以供将来在后台线程中执行的工具。

由于它在后台线程中运行,因此不是线程安全的。

someFunc()是否应该作为synchronized函数取决于它的作用,使其成为synchronized并不能自动保证线程安全。