首页 > 编程语言 >Java 中变量的线程安全问题

Java 中变量的线程安全问题

时间:2023-12-16 16:45:10浏览次数:34  
标签:Java 变量 静态 安全 线程 共享

Java 中的变量主要分为静态变量、普通成员变量、局部变量等,这些变量在单线程环境下是不会有线程安全问题的,但是多线程环境下实际情况又是什么样子的呢?

1、成员变量和静态变量

  • 如果成员变量和静态变量不存在多个线程共享操作,那么不会有线程安全问题
  • 如果成员变量和静态变量被多个线程共享,多个线程对共享变量都只有读操作,那么不会有线程安全问题
  • 如果成员变量和静态变量被多个线程共享,多个线程对共享变量既有读又有写操作,则会有线程安全问题
  • 如果成员变量和静态变量被多个线程共享,多个线程都对共享变量进行写操作,则会有线程安全问题

2、局部变量

  • 如果局部变量是基本数据类型不会出现线程安全问题,因为每个线程启动之后都会为其分配独立的 Java 虚拟机栈,不同的线程操作自己的虚拟机栈中的数据不会出现线程安全问题
  • 如果局部变量是引用类型,在变量不发生栈帧逃逸的情况下则不会有线程安全问题

有一种情况就是子类继承父类,重写父类中的方法,在重写的方法中开一个线程去操作共享变量,这样就会有线程安全问题

这个时候就要通过 private、final 这些修饰符去限制了

 

标签:Java,变量,静态,安全,线程,共享
From: https://www.cnblogs.com/xiaomaomao/p/17337715.html

相关文章

  • 无涯教程-Java - String intern()函数
    对于任何两个字符串s和t,当且仅当s.equals(t)为s时,s.intern()==t.intern()才为true。Stringintern()-语法这是此方法的语法-publicStringintern()Stringintern()-返回值此方法返回字符串对象的规范表示形式。Stringintern()-示例importjava.io.*;publicc......
  • 你知道哪几种Java锁?分别有什么特点?
    今天我们聊一聊Java锁的分类锁的7大分类需要首先指出的是,这些多种多样的分类,是评价一个事物的多种标准,比如评价一个城市,标准有人口多少、经济发达与否、城市面积大小等。而一个城市可能同时占据多个标准,以北京而言,人口多,经济发达,同时城市面积还很大。同理,对于Java中的锁而言......
  • 无涯教程-Java - int indexOf(String str)函数
    此方法返回指定子字符串首次出现在该字符串中的索引。如果不存在,则返回-1。intindexOf(Stringstr)-语法intindexOf(Stringstr)这是参数的详细信息-str   - 一个字符串。intindexOf(Stringstr)-示例importjava.io.*;publicclassTest{publicsta......
  • JavaScript: WebGL3D
    fragment.bns 文件用NotePad打开 WebGL3D用tomcat浏览#version300esprecisionmediumpfloat;uniformfloatuR;invec3vPosition;//接收从顶点着色器过来的顶点位置invec4finalLight;//接受顶点着色器传过来的最终光照强度outvec4fragColor;voidmain(){......
  • Java基础语法
    一.注释  java中的注释有三种:       1.单行注释    //         2.多行注释    /**/         3.文档注释    /***/二.标识符  1.所有的标识符都应该以字母(A~Z a~z),美元符($),下划线(_)开头   2.首字符之后可以是字母(A......
  • MySQL锁:Java开发者必须掌握的关键技术
    一、介绍在多用户并发访问数据库时,为了保证数据的一致性和完整性,数据库系统需要使用锁来控制对共享资源的访问。MySQL作为一款流行的关系型数据库管理系统,也提供了丰富的锁机制来支持并发控制。对于Java开发者来说,了解和掌握MySQL锁是至关重要的,因为它可以帮助我们更好地设计和优化......
  • 无涯教程-Java - int indexOf(int ch, int fromIndex)函数
    此方法返回指定字符首次出现在该字符串中的索引,如果没有出现该字符,则从指定索引fromIndex或-1开始搜索。intindexOf-语法publicinindexOf(charch,intfromIndex)这是参数的详细信息-ch        - 一个字符。fromIndex  - 从中开始搜索的索......
  • 直播平台搭建,Java 内存溢出的排查方法
    直播平台搭建,Java内存溢出的排查方法JDK自带命令jstat-gcutil3381625020#监控jvm的内存使用情况jps-ml#输出虚拟机启动时传递给主类main()的参数,输出主类的全名jmap-F-dump:live,format=b,file=dump.bin85962#dump堆内存#分析方法#可以使用Vi......
  • 直播软件搭建,java代码获取内存信息
    直播软件搭建,java代码获取内存信息一、获取堆外内存@GetMapping("/panama")publicMap<String,Object>panama(){ByteBufferbuffer=ByteBuffer.allocateDirect(1*1024*1024);Map<String,Object>map=newHashMap<>();......
  • java接口自动化系列(01):自动化测试框架设计(入门版)
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/17883399.html前言想必很多测试小伙伴自动化都是用的python吧?从当前测试招聘要求可以看到,测试开发就是全栈要求,要想在职场有竞争力,就得多个技术方向逐个提升;而和自动化、测开、性能、白盒等都相关的语言就是java,......