博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SimpleDateFormat线程不安全
阅读量:4183 次
发布时间:2019-05-26

本文共 1311 字,大约阅读时间需要 4 分钟。

由于SimpleDateFormat在解析时间的时候,

经历了两步,

Date parse() {  calendar.clear(); // 清理calendar  ... // 执行一些操作, 设置 calendar 的日期什么的  calendar.getTime(); // 获取calendar的时间}

分别是clear()和setTime()。

例如当线程A执行clear操作时,线程B还没有执行clear会造成两个数据一起删除,线程A和线程B,
无法准确获得数据。
解决方法有:
1.将SimpleDateFormat不设置为静态。
2.使用ThreadLocal
3.使用FastDateFormat
这个方法需要引用第三方包

*线程不安全代码

package hello;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class DateFormatTest extends Thread{
private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");private String name;private String dateStr;private boolean flag;public DateFormatTest(String name,String dateStr,boolean flag){this.name = name;this.dateStr = dateStr;this.flag = flag;}public void run(){Date date = null;try {date = sdf.parse(dateStr);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("name:"+name +" date:"+date+ "" );}public static void main(String[] args) throws ParseException {ExecutorService exec = Executors.newCachedThreadPool();//证明其线程不安全for(int i=0;i<10;i++){exec.submit(new DateFormatTest("张三 "+i, "2015-11-12", false));exec.submit(new DateFormatTest("李四 "+i, "1990-01-2", false));}//exec.shutdown();}}

转载地址:http://nlzoi.baihongyu.com/

你可能感兴趣的文章
802.11 traffic id
查看>>
Android系统wifi分析-手动连接过程
查看>>
设置IP别名Shell脚本
查看>>
Source Insight 宏-单行注释
查看>>
levelDB源码分析-Arena
查看>>
levelDB源码分析-SSTable
查看>>
平滑升级Nginx的Shell脚本
查看>>
SSH远程会话管理工具
查看>>
canvas标签设长宽是在css中还是在标签中
查看>>
如何创建一个vue项目
查看>>
webpack和webpack-simple中如何引入css文件
查看>>
vue1.0和vue2.0的区别之路由
查看>>
关于vue-router2.0的学习笔记
查看>>
vue1.0与2.0区别之生命周期
查看>>
vue2.0之非父子组件通信
查看>>
如何建立svn版本库并运行它
查看>>
如何合并svn分支到主干上
查看>>
libusb源码学习:list_entry
查看>>
libusb源码学习:几个函数加载的宏(windows)
查看>>
MCU_如何通过硬件VID 查找生产厂家
查看>>