java静态方法与非静态方法的区别 多线程调用静态方法是否线程安全

区别
静态方法会随着类的加载装入内存中,并且只为类创建了一个静态副本,只分配一个内存空间,虽然该类可能有多个对象,但是静态成员只有一份,为多个类共享。
非静态方法属于对象的具体实例,只有在类的对象创建时(new 对象时…)在对象的内存中才有这个方法的代码段。
因为静态方法随着类的加载时候就已经构建,时间要早于非静态方法,故静态方法只能调用静态方法和静态变量(因为编译静态方法的时候非静态方法和非静态变量还没有编译),而非静态方法却可以调用静态方法和成员。
静态方法使用
类名.方法名或者对象名.方法名
非静态方法使用
对象名.方法名

多线程调用静态方法是否线程安全?
多线程中使用同一个静态方法时,每个线程使用方法内局部变量的副本,而共享一个静态字段(static field)。所以说,如果该静态方法不去操作一个静态成员,只在方法内部使用局部变量,不会引起安全性问题。但是,如果该静态方法操作了一个静态字段,则需要静态方法中采用互斥访问的方式进行安全处理。
即多线程调用静态方法,会复制一份代码,所以方法是安全。但静态变量在java 虚拟机中是唯一。如果在方法中修改全局静态变量,就会线程不安全。

https://blog.csdn.net/xiamin/article/details/102696179
https://blog.csdn.net/Lzz0614/article/details/86513575

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值