Java静态变量小感
声明一个static int 变量,在多个线程中对他进行操作,就会出现数据异常的问题,
问:
那么我们在日常情况下应该如何正常,正确的使用static关键字呢,是一定要和final关键字联合使用吗,
还是什么样的变量可以用static声明什么样的最好不要
----------------------------------------------------------------下面是我获得到的我想要的答案
答:
就是我们平常web开发中,很少会使用主动使用多线程,但是还有一种多线程情况就是每个用户都是一个
线程,当访问量很大的时候是不是也就是多线程了呢,可是这种时候你使用非静态成员变量是没问题的,
因为每个用户都是不同的实例,每个用户都是new的新的类对象,所以类中的变量也都是互相不干扰的,
也就是线程安全的,但如果是静态变量,就是多用户共享,也就是多线程共享,
所以多个用户同时修改数据时就会出现问题,难道我们平常开发中每次使用静态变量都要考虑线程安全
问题吗
追问:
日常web开发中如果不使用多线程,是不用考虑线程安全的问题的对吧。但是如果使用了静态变量,即使不开启多线程,也要考虑多线程安全问题对吗,
因为每个用户都是多个线程,都会同时操作静态变量
追答:
大哥,你这是另一个问题了,我是针对你刚刚的问题答的。如果要针对你现在的问题,
平常不管是用Spring还是Servlet,都是单例的,会在不同请求线程之间共享,
所以其不管是实例变量还是静态变量都会被共享。如果确定要共享,那么需要确保线程安全性。
但是如果要在多个请求间共享可变变量呢?根据业务场景不同而不同,
可以采用我上述提到的java自带的机制及加锁等,也可以采用消息队列,数据库,redis.
追答:
还有一点要纠正你一下,不是只有静态变量才会被共享,一个实例变量被多个线程使用时也是被共享的。
日常web开发,每个http请求一个线程。如果你不涉及共享可变变量,是不需要考虑线程安全性的。
如果你想共享一些信息,对于传统单体应用来说,简单点可以通过session来共享。
还有点,你关于线程安全的东西,建议你去补补理论基础。推荐一本经典书:<<Java并发编程实战>>
国外大牛写的,不是国内的那本。
回复 xbynet:
好的 ,谢谢 ,我刚试了下,您说的对,不是静态变量也会被共享
Java静态变量小感相关推荐
- Java 静态变量,静态方法,静态常量(java static 关键字)
Java 静态变量,静态方法,静态常量 就是变量 ,方法,常量前面添加了static 关键字 为什么要使用静态的呢 有时候在处理问题时会需要两个类在同一个内存区域共享一个数据, 不如现在 Main ...
- java 静态变量生命周期(类生命周期)
java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- Java 静态变量生命周期
Java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...
- Java静态变量的初始化
Java静态变量的初始化 C/C++在脑海中的印象太深了,以至于一看到 static 的变量(Java中叫做:域),本能的以为它一旦初始化就不能改变了. 原来Java在还有 final . 转自:ht ...
- java静态变量需要初始化吗_» Java静态变量初始化顺序浅谈
Java 类初始化顺序在网上已经有很多文章了,这里不再谈那么多,仅仅谈下Java静态变量的初始化顺序,如果你是Java高手,并且自认为对这个顺序已经掌握到了炉火纯青的境界,请忽视这篇文章. 前天看了Y ...
- JAVA静态变量是什么
java静态变量是什么-Java基础-PHP中文网 在java中,静态变量指的是被static修饰的类的变量:静态变量被所有类实例对象所共享,在内存中只有一个副本,当且仅当在类初次加载时会被初始化. ...
- java 静态变量声明_java静态变量怎么声明?
展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...
- java 静态变量,成员变量,局部变量的默认值
java 静态变量,成员变量,局部变量的默认值 静态变量和成员变量的默认值 判断char是否被赋值 局部变量的默认值 静态变量和成员变量的默认值 静态变量和成员变量的默认值时一样的 public cl ...
- java怎么访问静态属性_Java基础——java静态变量面试题
Java面试中主要考察的就是应聘者的基础知识的掌握情况,静态变量是属于静态存储方式,是java中基础性的内容.下面就为大家准备了10道java静态变量面试题,希望可以帮助到有面试需要的朋友们. 1.s ...
最新文章
- win7完美兼容DynamipsGUI(小凡模拟器)攻略
- angularJs在线API文档
- oracle函数查询数据字典
- c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法
- OpenCV高级形态转换的实例(附完整代码)
- java web 页面提速
- php stdclass,php中new stdclass()用在什么场景
- 模线性方程(中国剩余定理+扩展中国剩余定理)
- 初创公司 经营_LibreCorps指导人道主义初创公司如何运行开源方式
- HTML页面模板代码
- Java的三种技术架构是什么?
- 网络出版服务许可证 你了解吗?
- Android webview与js交互
- 分享舍得网开发经验(修改版)(转载)
- 东莞 小学计算机编程大赛,小学生编程大赛【小学生大赛自我介绍】
- uniapp 使用map组件 动态自定义标记点图标及内容文字
- u盘格式化后如何恢复数据,三步轻松恢复!
- excel中文本格式如何批量转化成数字
- Young氏双缝干涉实验近似公式推导的传统谬误
- 这款视频录制剪辑软件千万别错过!
热门文章
- 警告:MySQL-server-5.6.26-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
- 小程序开发,不现实用户的头像!
- |Vijos|NOIP2015|模拟|P1975 扫雷游戏
- 鼎信通达gsm网关和asterisk对接的调试
- useradd添加用户
- Centos 6让SVN提交文件自动更新到nginx的WEB目录
- SET NOCOUNT
- [原]超快速搞定linux的vnc
- Java开发笔记(一百四十三)FXML布局的基本格式
- 反射(一)动态加载类