Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程安全从另一个线程内调用TimerTask_Java_Multithreading_Timer_Thread Safety_Timertask - Fatal编程技术网

Java 线程安全从另一个线程内调用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() { @

我有一个实现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() {
        @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循环内的同一实例上进行同步。请参见此处:。