java多线程调用静态方法安全吗

 我来答
匿名用户
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的累加后的值,所以说,多线程情况下,静态方法中如果操作静态成员变量,那这个静态方法就不是线程安全的

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式