多线程中调用静态方法是否存在线程安全问题 (浅尝辄止)

类的成员有两类:一、静态成员(static member)二、实例成员(instance member)。

静态成员属于类,实例成员则属于对象(即类的实例)

大家都知道  静态的字段 [static field] 、方法 [static method] 是要通过 类 来调用。

静态方法不对特定的实例操作,只能访问静态成员。

实例方法可对特定的实例操作,既能访问静态成员,也能访问实例成员。

那么,在多线程中使用静态方法是否存在线程安全问题 ?

答:这要看静态方法是引起线程安全问题,在静态方法中是否使用了静态成员  (静态成员类似于全局变量的概念,虽然java中并不存在所谓全局的概念)。

因为,在多线程中使用同一个静态方法时,每个线程 (在java中,不同的线程中存在着“隔离”,线程隔离技术) 都使用各自的实例字段[instance field]的副本,却都是共享一个静态字段[static field]

所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用实例字段[instance field],不会引起安全性问题。

但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问(例如:加锁等)方式进行安全处理。

多线程调用静态方法,会复制一份代码,所以方法是安全。但静态变量在java 虚拟机中是唯一。

如果在方法中修改全局静态变量,就会线程不安全。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值