DateFormat是线程不安全
昨天同事在写一个多线程代码的时候,出现了共享对象被修改的问题。
for(int i=1; i<=pageNo; i++){searchDO.setPageSize(PER_PAGE);searchDO.setPageNo(i);Callable<List<String>> callable = new SearchThreadMethod("thread_"+i, searchDO);Future<List<String>> future = cuPool.submit(callable);if (future != null){setAll.add(future);}}
可以看出红色代码部分,i被修改了;
想象一下,在一个多线程环境下,有两个线程持有了同一个的searchDO实例:
1,线程1调用setPageNo(),改变了pageNo这个字段
2,线程1中断
3,线程2调用setPageNo(),也改变了pageNo
4,线程1恢复,此时pageNo的值已经被线程2修改了
可想而知,结果并不是我们要的。
在我们常用的工具类中,比如DateFormat也不是线程安全的,所以在使用的时候需要特别注意。
解决线程安全问题的几种方法:
1,利用局部变量替代共享实例。
2,使用threadLocal
3,代码段同步,不过这个需要性能开销
4,使用第三方开发的线程安全的jar包
贴下今天看的两个帖子:
1,http://www.oschina.net/translate/dateformat-with-multiple-threads
2,http://www.infoq.com/cn/news/2012/06/ugly-code-12
转载于:https://www.cnblogs.com/iusmile/archive/2013/01/18/2866074.html
DateFormat是线程不安全相关推荐
- java.util类,GitHub - yutaolian/JavaUtils: 总结的一些Java常用的util类
JavaUtils 总结的一些Java常用的util类 ###1.格式化时间 SimpleDateFormat(DateFormat)实现线程安全的使用 众所周知SimpleDateFormat(Da ...
- java-并发-并发容器(3)
同样注意内层的第一个for循环,里面有语句int c = segments[i].count; 但是c却从来没有被使用过,即使如此,编译器也不能做优化将这条语句去掉,因为存在对volatile变量co ...
- ThreadLocal封装SimpleDateFormat
调用Thread.currentThread()获取当前线程. JDK提供了ThreadLocal,在一个线程中传递同一个对象. ThreadLocal表示线程的"局部变量",它确 ...
- java litjson_仿造 Gson 的自制 json 解析器
零 引子 0 源码 1 开发依赖 Maven : 3.3.9 (主要用作打包工具) IDE : idea 2018.3 JDK : OpenJDK 11.0.1 (OracleJDK 8 以上即可) ...
- Java日期工具-Joda-Time和FastDateFormat
目录 文章目录 1.基本介绍 2.JDK中的SimpleDateFormat 2.1问题复现 2.2问题解析 2.3解决方案 2.3.1方案一:每次都实例化 2.3.2方案二:使用synchroniz ...
- 关于日期和时间的解析
来源:Java编程的逻辑 日期和时间 1 基本概念 时区 我们都知道,同一时刻,世界上各个地区的时间可能是不一样的,具体时间与时区有关,一共有24个时区,英国格林尼治是0时区,北京是东八区,也就是说格 ...
- 计算机程序的思维逻辑 (32) - 剖析日期和时间
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>(马俊昌著),由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买:京东自营链接 ...
- Java 常用基本类 剖析日期和时间(Java8以前)
这里写目录标题 声明 7.5 剖析日期和时间 7.5.1 基本概念 1.时区 2.时刻和纪元时 3.年历 7.5.2 日期和时间API 1.Date 2.TimeZone 3.Locale 4.Cal ...
- 多线程编程指南 part 2
多线程编程指南 Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA95054 U.S.A. 文件号码819–7051–10 2006 ...
最新文章
- git---gui使用
- a++浏览器_走进浏览器内部—剖析浏览器是如何工作的(上)
- canvas绘制精细走动时钟
- 广州仙村中学2021高考成绩查询,仙村中学(增城区)
- 如何设计沉浸式游戏引导界面?你要知道的七大点
- 1009. Complement of Base 10 Integer*
- obj文件、mtl文件结构说明
- 唯此间江湖年少,偏爱纵横天下。
- 护卫神6588端口提权
- 情人节过了!你的数据还安全吗?
- gmoj 6860. 【2020.11.14提高组模拟】鬼渊传说
- 5个小技巧 教你在家里如何给花儿拍“写真”
- 微信小程序真机调试不能访问本地API
- Oracle 查询工具 在WIN7 64位下安装PLSQL
- 类的封装继承多态以及virtual interface-SV
- C++ 纯 OpenCV 实现扑克牌实时识别
- 使用钉钉的同时又想使用CRM功能,该怎么办?
- 获取app和手机信息的一些方法
- 一则经典技术面试题目的解读
- 《J2SE 回炉再造15》-------溺水狗
热门文章
- SpringMvc JavaMailSenderImpl 邮件发送时到时前端无法接受Json数据问题解决
- eclipse怎么运行不了服务器,eclipse可以运行,部署服务器启动不起来
- ionic4 返回键退出app
- SpringBoot配置文件加密
- java data 图像 显示_Java(JMF)获取本地摄像头,实时显示图像
- python解析库详解_PyQuery库详解
- 100内奇数之和流程图_互联网人工智能编程语言Python之while循环详解
- Java服务器上显示图片问题_java,_服务器读取图片到jsp显示问题,java - phpStudy
- 登录自动填密码php,192 实现自动登录无限路由器后台管理网页,可以记住自己输入的密码 WEB(ASP,PHP,...) 238万源代码下载- www.pudn.com...
- java哈希映射干什么的_java – 为什么在哈希映射中有空值或空键是有用的?