当前位置: 首页 > backend >正文

Java语言 static (静态变量、实例变量、局部变量、静态方法)

(一)静态变量:线程非安全

   1、静态变量:使用static关键字定义的变量。static可以修饰变量和方法,也有static静态代码块。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

    用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它的类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。

    2、静态变量使用的场景:

    (1)对象间共享值时

    (2)方便访问变量时

    3、静态方法使用注意事项:

    (1)不能在静态方法内使用非静态变量,即不能直接访问所属类的实例变量;

    (2)不能在静态方法内直接调用非静态方法;

    (3)静态方法中不能使用this和super关键字;

    4、验证静态变量的线程安全性:

    (1)从程序执行的图中我们可以看出,执行结果中有错误数据,证明了静态变量是存在资源冲突问题的。

    (2)程序运行结果图: 

    wKioL1XIYiCz51UGABceSj2NUtI169.bmp

    5、结论:静态变量也称为类变量,属于类对象所有,位于方法区,为所有对象共享,共享一份内存,一旦值被修改,则其他对象均对修改可见,故线程非安全


    (二)实例变量:单例时线程非安全,非单例时线程安全

    1、实例变量:实例变量属于类对象的,也就是说,属于对象实例私有,在虚拟机的堆中分配。

    2、验证实例变量的线程安全性:

    (1)从程序截图中,我们可以看到,当为单例模式时,会产生资源冲突,当非单例模式时,则不会产生线程冲突。

    (2)程序运行结果图:

    图1:

    wKioL1XIYl_RoatmABZU8hrY9Ck087.bmp

    图2:

    wKioL1XIYpzTOhE2ABZK5iG2N3I856.bmp

 3、结论:实例变量是实例对象私有的,系统只存在一个实例对象,则在多线程环境下,如果值改变后,则其它对象均可见,故线程非安全;如果每个线程都在不同的实例对象中执行,

则对象与对象间的修改互不影响,故线程安全。

    (三)局部变量:线程安全

     1、局部变量:定义在方法内部的变量。

     2、验证局部变量的安全性:

    (1)从程序截图中可以看出,局部变量在多线程下没有产生资源冲突的问题

    (2)程序运行结果图:

    wKiom1XIYLvxqpwpABZORsRL6uY028.bmp

    3、结论:每个线程执行时都会把局部变量放在各自的帧栈的内存空间中,线程间不共享,故不存在线程安全问题。


    (四)静态方法的线程安全性

     1、静态方法中如果没有使用静态变量,则没有线程安全的问题;

          静态方法内的变量,每个线程调用时,都会新创建一份,不会公用一个存储单元,故不存在线程冲突的问题。

 

http://www.xdnf.cn/news/11293.html

相关文章:

  • 数据结构课程设计
  • WinPE安装与卸载(微PE版)
  • Matlab中plot画图线型、标记和颜色
  • 黑客完全修炼手册(收藏)
  • Python学习之海龟绘图
  • 计算机丢失UxTheme无法修复,win10系统丢失uxtheme.dll的修复办法
  • 托管代码
  • slot插槽以及具名插槽
  • nagios 安装
  • 使用深度学习检测混凝土结构中的表面裂缝
  • mapinfo10.5破解版安装
  • CSS滤镜(Filter)全攻略
  • ROS官方教程[翻译]---message_filter的使用
  • VC++类型转换整理(转载)
  • Edius简易教程
  • 编译原理课程设计(编写编译器)
  • 嵌入式外设集 -- 液晶显示模块(LCD1602)
  • DTFD-MIL: Double-Tier Feature Distillation Multiple Instance Learning for WSI_论文笔记
  • 开源建站系统——phpnuke8安装步骤
  • 把Flash动画轻松转成GIF图片
  • 使用客户端脚本
  • 旁注原理
  • 【星界探索——通信卫星】铱星:从“星光坠落”到“涅槃重生”,万字长文分析铱星卫星系统市场
  • 盗号工具手机版下载/手机版盗号工具下载网站-详细信息安全教学
  • 史上最全免费收录网站搜索引擎登录口(经典)
  • Dirac delta function (狄拉克 delta 函数)
  • AD域(active directory)基础概念(一)
  • 酱茄社区论坛圈子小程序pro更新与WordPress开源版小程序下载
  • JAVA学习之反射(1):Class类和java.lang.reflect包的使用
  • Java实现多线程