java - 从另一个线程内调用 TimerTask 是线程安全的

标签 java multithreading timer thread-safety timertask

我有一个实现可运行的 ABC 类。 ABC有多个线程在运行。在每个线程中我想安排一个 TimerTask。在此 TimerTask block 内调用的函数对于线程的变量而言需要是线程安全的。

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 并不能自动保证线程安全。

关于java - 从另一个线程内调用 TimerTask 是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097076/

相关文章:

java - 黑莓定时器不触发 TimerTask

c# - 时间触发的 Azure Functions

javascript - 清除间隔不起作用

java - DistributionManagement 和 Repositories 中的不同存储库

java - Android 登录屏幕切换

multithreading - “Autoreleased with no pool in place”是什么意思?

android - DB-Activity 架构和/或 Context 泄漏的 ContentProvider 解决方案

C++ 代码 - Coverity(或其他一些静态代码分析器)+线程安全

java - 如何检查时间是否重叠?

java - 如何将 IBM Cloud API for Java 的 Maven 添加到 Android Studio?