我有一个实现可运行的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()成为同步函数?
答案 0 :(得分:0)
Javadoc说:
公共类计时器 扩展对象
一种用于线程安排任务以供将来在后台线程中执行的工具。
由于它在后台线程中运行,因此不是线程安全的。
someFunc()
是否应该作为synchronized
函数取决于它的作用,使其成为synchronized
并不能自动保证线程安全。