对java变量线程安全的理解

 时间:2026-02-15 23:52:39

1、变量的分类:类变量,实例变量,局部变量(方法里面的变量)

2、假设,一个主线程类,一个子线程类。主线程中开启多个子线程。子线程没有再开启子线程。

3、分析每一种变量(以下的分析基于2中的假设)

(1):首先,对变量的读操作不会出现问题,写操作可能会出现问题。

2、(2):类变量(主类),  可能会出现线程安全问题(如果子类的run方法对类变量(主类)进行写操作,会发生线程安全问题;否则不会)。看下面的例子,在主线程中定义一个类变量,然后在子线程中对其值加1。如果没有线程安装问题结果应该是3000,结果是2997,说明有3个线程读了脏数据。

对java变量线程安全的理解

对java变量线程安全的理解

对java变量线程安全的理解

3、(3):类变量(子类),  可能会出现线程安全问题(如果子类的run方法对类变量(子类)进行写操作,会发生线程安全问题,否则不会,这和(2)中的情况其实是一个意思)。看下面的例子,在子线程中定义一个类变量,然后在子线程中对其值加1。如果没有线程安装问题结果应该是6000,结果是5999,说明有1个线程读了脏数据。

对java变量线程安全的理解

对java变量线程安全的理解

对java变量线程安全的理解

4、(4):实例变量(主类),可能会出现线程安全问题,如果主类的实例变量,在开启子线程时,将此变量传递给了子线程,并且子线程有写操作,就会出现线程安全问题。

(5):实例变量(子类),不会出现线程安全。因为此变量只属于某个线程,其他线程不会访问到(每个线程都会创建自己的一份,不会共享)。

实例变量是一个类的非静态属性:

对java变量线程安全的理解

5、(6):局部变量(主类),可能会出现线程安全问题,同(4)。

(7):局部变量(子类),不会出现线程安全,同(5)。

局部变量是方法的变量:

对java变量线程安全的理解

6、测试(6)。在主线程中定义一个局部变量,然后将其传入子线程,并在子线程中对其值加1。如果没有线程安装问题结果应该是8000,结果是7998,说明有2个线程读了脏数据。

对java变量线程安全的理解

对java变量线程安全的理解

对java变量线程安全的理解

对java变量线程安全的理解

  • 非常简单的蜂蜜布丁
  • archlinux安装教程
  • nmap的常用的几个选项简介
  • 公主连结6-9怎么打三星 6-9三星通关攻略
  • java获得硬件标识方法
  • 热门搜索
    埃尔夫机油怎么样 怎么样打字速度快 卤牛肉怎么做好吃 贺信怎么写 怎么叠心 煎鱼怎么不粘锅 格力中央空调怎么样 怎么注册电子邮件 快递丢件怎么赔偿 滑板怎么刹车