gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:14:38 26 4
gpt4 key购买 nike

我有一个实现可运行的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com