作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实现可运行的 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/
我是一名优秀的程序员,十分优秀!