TimerTask范围内的所有对象是否都需要线程安全?
例
@Autowired
private MySweetService mySweetService;
int delaySeconds = 0;
int intervalMinutes = 1;
for(int i=0; i<5; i++) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
// This method below is my questionable area
mySweetService.doStuff(i);
}
}, delaySeconds, intervalMinutes);
}
是否在timerTask匿名类中所有内容都必须是线程安全的?有内在的问题吗?
解决方法:
现在,您有5个我们知道的线程doStuff,它们是在循环中创建的Timer线程.如果一个方法与多个线程进行交互,则您无法同时调用同一方法,显然您需要考虑线程安全性.
但是具有单个线程的方法调用不足以提供线程安全性.考虑以下代码:
private int value;
void add(int x) {
value+=x;
}
void sub(int x) {
value-=x;
}
给定2个线程,每个线程都调用这些方法之一,代码显然不是线程安全的.
关键是:线程安全性是关于状态的,而不是关于方法的.
标签:timertask,multithreading,java
来源: https://codeday.me/bug/20191029/1960145.html