编程语言
首页 > 编程语言> > java-TimerTask范围内的所有对象是否都需要线程安全?

java-TimerTask范围内的所有对象是否都需要线程安全?

作者:互联网

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