高并发下的static类成员可能存在安全隐患
有一个网友在高并发下使用下面的日期转换工具类时,遇到的问题
public class DateUtil
{
private DateUtil(){
}
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static Date parse(String date) throws ParseException
{
return DATE_FORMAT.parse(date);
}
}
异常:
java.lang.NumberFormatException: For input string: ""
SimpleDateFormat这个类的源码。果然,在这个类的注释里,有这么一段话。
* Date formats are not synchronized.* It is recommended to create separate format instances for each thread.* If multiple threads access a format concurrently, it must be synchronized* externally.
如何对待和定义静态对象?
static的目的是class共有的,并在内存中只定义一份,降低对内存的消耗,但在高并发下,要注意这种共享资源的安全问题。
观点:
static破坏了封闭,所有的类共享一个实例,在高并发第一个出问题必定是static,去掉static 可能一点事都没有
无论在java,还是在c++,还是objective-c,尽量少用static,特别在有多线程的场合
static表面上省内存,实质上更占内存,因为static内存很多时候不会被及时释放,static可能会导致性能降低,因为多个类都在等static的资源,static可能会导致并发问题。
oop的原则是能用new object就用new object,尽量不要在oop的墙上打洞。
观点二:
static是定时炸弹,不知道什么时候发作。不去使用它就不会发作。有了new根本没必要使用static,static反而会使内存出现问题,而new的问题比较容易解决。
static是c语言时代的产生,是为了方便共享资源,大凡“共享”的东西都容易出问题,因为“共享”的东西会出出现资源竞争的情况,在一定条件下就会发作。
现代cpu算力过剩,但内存不能崩,所以根本不需要使用static。
static是兼容所谓c++设计的,用于学习测试等单线程环境使用,是历史问题,在生产中中尽量不要使用static,使用new object才能充分发挥oop在jvm上的安全和自动管理性能。
转载于:https://www.cnblogs.com/hill-tell/p/7634773.html
高并发下的static类成员可能存在安全隐患相关推荐
- 12.6 static类成员
在程序的任意点需要统计已创建的特定类类型对象的数量,或者类的错误处理历程的一个指针(即类的所有对象出错后的处理方法),或者类中的对象需要访问一个共同的变量时(如银行中的账户类,每个账户都有用户名,余额 ...
- C++ static 类成员
节选自<C++ Primer>,还是书上写的最清楚. 12.6. static 类成员 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定 ...
- 由微软100题“求和不用for while”引出的static类成员的知识
转自:http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html C++类中谈到static,我们可以在类中定义static成员,stati ...
- 37、C++ Primer 4th笔记,特殊工具与技术,类成员指针
1.成员指针(pointer to member)包含类的类型以及成员的类型.成员指针只应用于类的非static成员.static类成员不是任何对象的组成部分,所以不需要特殊语法来指向static成员 ...
- 利用反射获得类的public static/const成员的值
首先,我们定义一个类: class CDynamic{ #if truepublic const string TableName = "p_battlerecord"; // O ...
- c/c++教程 - 2.4.2.7~8 类对象作为类成员,static静态成员变量函数
目录 4.2.7 类对象作为类成员 4.2.8 静态成员 相关教程 4.2.7 类对象作为类成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员. 例如: class A {} cla ...
- C++类中的static数据成员,static成员函数
文章转自:http://www.cnblogs.com/gysm/archive/2011/09/16/2179277.html 版权归原作者. C++类中谈到static,我们可以在类中定义stat ...
- 面试官:高并发下,如何保证分布式唯一全局 ID 生成?
欢迎关注方志朋的博客,回复"666"获面试宝典 前言 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结. 这篇文章就是给各位看官提供一个生成分布式唯一 ...
- 高并发下的秒杀系统架构设计实战!
1.秒杀业务分析 正常电子商务流程 (1)查询商品: (2)创建订单: (3)扣减库存: (4)更新订单: (5)付款: (6)卖家发货: 秒杀业务的特性 (1)低廉价格: (2)大幅推广: (3)瞬 ...
最新文章
- Java基础学习总结(6)——面向对象
- 安卓系统底层C语言算法之测试参数是几个long型的算法
- 解读基本数据类型和内置方法(2)
- dedecms插件开发教程
- 路径问题(如何正确写出文件路径)
- C语言指针实现计算平均分等功能
- 数据结构与算法之二叉树的序列化和反序列化及判断一棵树是否为平衡二叉树
- byte与或运算 java_java中byte转换int时为何与0xff进行与运算
- javaweb基础 - Servlet
- SCADA之父:物理隔离没什么用
- Dev-C++的安装使用与介绍
- android studio for android learning (二十二 )如何在camera2中加载其它控件和当前摄像头视图显示在一起以及UI优化
- mooc作业怎么上传附件_中国MOOC高手练级指南
- 前端入门篇(四十)JS基础7浏览器原理和BOM
- HTML5制作诗歌锦集,轻叩诗歌的大门作文锦集6篇
- 【20点埃及 VS 乌拉圭/23点摩洛哥vs 伊朗】快看人工只能预测结果(附最全赛事时间表)...
- android插件实现打印机,Android USB调用打印机(针式打印机)
- 解决WIN10打开XBOX闪退问题(2022)
- 盘点2011年的网络流行语
- uclinux系统简介
热门文章
- css 缩放_CSS 中 transform、animation、transition、translate的区别
- LabelBinarizer的妙用
- 面试有没有看过spring源码_如何看Spring源码、Java每日六道面试分享,打卡第二天...
- python写入excel数据教程_python 将数据写入excel
- 校内训练赛题解第三篇
- Systemctl stop XXX 时间太长
- 【企业管理】14 项管理原则
- 笔记-信息系统开发基础-架构设计-软件架构主要职责
- 笔记-项目成本管理-估算成本的步骤
- Vue+Openlayers实现地图上绘制线