java多线程调用静态方法安全吗
1个回答
2017-10-24
展开全部
这要看静态方法中有没有操作静态成员变量了,看代码吧
public class StaticMethod implements Runnable {
static int num=0;
public static void addOne() throws InterruptedException {
for (int i = 0; i <= 10; i++) {
num += i;
}
System.out.println(Thread.currentThread().getName() + "-" + num);
num=0;
}
}
如上面代码所示,当单线程运行情况下是输出正常的,num最后应该输出55,但是在多线程情况下,则会出现每个线程输出的num不一样的情况,这是因为num是静态成员变量,为多个线程所共享的,有可能会出现一个线程的num值还没有重新赋值为0,另外一个线程已经读取到num的累加后的值,所以说,多线程情况下,静态方法中如果操作静态成员变量,那这个静态方法就不是线程安全的
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询