从另一个线程内调用 TimerTask 是线程安全的
Thread safe calling a TimerTask from within another Thread
我有一个实现可运行的 class 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() 成为一个同步函数?
Javadoc 说:
public class Timer
extends Object
A facility for threads to schedule tasks for future execution in a background thread.
由于它在后台线程中运行,因此它不是线程安全的。
someFunc()
是否应该是一个 synchronized
函数取决于它的作用,使其成为 synchronized
并不能自动保证线程安全。
我有一个实现可运行的 class 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() 成为一个同步函数?
Javadoc 说:
public class Timer extends Object
A facility for threads to schedule tasks for future execution in a background thread.
由于它在后台线程中运行,因此它不是线程安全的。
someFunc()
是否应该是一个 synchronized
函数取决于它的作用,使其成为 synchronized
并不能自动保证线程安全。