Java 线程安全从另一个线程内调用TimerTask
我有一个实现runnable的类ABC。ABC的多个线程正在运行。在每个线程中,我想安排一个TimerTask。在这个TimerTask块中调用的函数对于线程的变量需要是线程安全的Java 线程安全从另一个线程内调用TimerTask,java,multithreading,timer,thread-safety,timertask,Java,Multithreading,Timer,Thread Safety,Timertask,我有一个实现runnable的类ABC。ABC的多个线程正在运行。在每个线程中,我想安排一个TimerTask。在这个TimerTask块中调用的函数对于线程的变量需要是线程安全的 public class ABC implements Runnable { private int abc = 0; public void run() { Timer timer = new Timer(); timer.schedule(new 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成为一个同步函数 报告说:
公共类计时器
扩展对象
线程调度任务以供将来在后台线程中执行的工具
因为它在后台线程中运行,所以它不是线程安全的
someFunc是否应该是一个同步函数取决于它所做的事情,使它同步并不能自动保证线程安全。否。不是。您不需要使某些函数同步。如果您愿意的话,可以通过其他方式处理AtomicInteger等内容。假设这是我想要运行的代码。使someFunc同步是否保证线程安全?如果使someFunc同步,它将使用属于该ABC实例的互斥锁。由于someFunc修改abc,因此还需要在while-true循环内的同一实例上进行同步。请参见此处:。