iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java SimpleDateFormat线程不安全问题怎么解决
  • 329
分享到

Java SimpleDateFormat线程不安全问题怎么解决

2023-07-05 16:07:29 329人浏览 泡泡鱼
摘要

本篇内容主要讲解“Java SimpleDateFORMat线程不安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java SimpleDateFormat线程

本篇内容主要讲解“Java SimpleDateFORMat线程安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java SimpleDateFormat线程不安全问题怎么解决”吧!

    多线程SimpleDateFormat

    public class DateTest {    //工具类中的日期组件    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    public static void main(String[] args) throws Exception {        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 100, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(10));        for (int i = 0; i < 100; i++) {            threadPoolExecutor.execute(() -> {                String dateString = sdf.format(new Date());                try {                    Date parseDate = sdf.parse(dateString);                    String dateString2 = sdf.format(parseDate);                    System.out.println(dateString.equals(dateString2));                } catch (Exception e) {                    e.printStackTrace();                }            });        }    }}

    结果

    Java SimpleDateFormat线程不安全问题怎么解决

    原因分析

    全局变量的SimpleDateFormat,在并发情况下,存在安全性问题。

    我们通过源码看下:

    SimpleDateFormat继承了 DateFormat

    Java SimpleDateFormat线程不安全问题怎么解决

    DateFormat类中维护了一个全局的Calendar变量

    Java SimpleDateFormat线程不安全问题怎么解决

    sdf.parse(dateStr)和sdf.format(date),都是由Calendar引用来储存的。

    如果SimpleDateFormat是static全局共享的,Calendar引用也会被共享。

    又因为Calendar内部并没有线程安全机制,所以全局共享的SimpleDateFormat不是线性安全的。

    解决方法

    解决方法1

    「FastDateFormat(FastDateFormat能保证线程安全) 替换 SimpleDateFormat」

    private static final FastDateFormat sdf = FastDateFormat.getInstance(“yyyy-MM-dd HH:mm:ss”);

     测试代码如下所示:

    public class DateTest {    //工具类中的日期组件//    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    private static final FastDateFormat sdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");    public static void main(String[] args) throws Exception {        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 100, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(10));        for (int i = 0; i < 100; i++) {            threadPoolExecutor.execute(() -> {                String dateString = sdf.format(new Date());                try {                    Date parseDate = sdf.parse(dateString);                    String dateString2 = sdf.format(parseDate);                    System.out.println(dateString.equals(dateString2));                } catch (Exception e) {                    e.printStackTrace();                }            });        }        threadPoolExecutor.shutdown();    }}

    打印结果:

    Java SimpleDateFormat线程不安全问题怎么解决

    解决方法2

    「使用DateTimeFormatter(DateTimeFormatter是线程安全的,java 8+支持)代替SimpleDateFormat」

    private static DateTimeFormatter sdf = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);

    测试代码如下:

    public class DateTest {
    //工具类中的日期组件
    // private static final SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
    private static DateTimeFormatter sdf = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);

    // private static final FastDateFormat sdf = FastDateFormat.getInstance(“yyyy-MM-dd HH:mm:ss”);

    public static void main(String[] args) throws Exception {    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 100, 1, TimeUnit.MINUTES, new LinkedBlockingQueue<>(10));    for (int i = 0; i < 100; i++) {        threadPoolExecutor.execute(() -> {            try {                String dateString = sdf.format(LocalDateTime.now());                TemporalAccessor temporalAccessor = sdf.parse(dateString);                String dateString2 = sdf.format(temporalAccessor);                System.out.println(dateString.equals(dateString2));            } catch (Exception e) {                e.printStackTrace();            }        });    }    threadPoolExecutor.shutdown();}

    打印结果如下:

    Java SimpleDateFormat线程不安全问题怎么解决

    到此,相信大家对“Java SimpleDateFormat线程不安全问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: Java SimpleDateFormat线程不安全问题怎么解决

    本文链接: https://www.lsjlt.com/news/353268.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java SimpleDateFormat线程不安全问题怎么解决
      本篇内容主要讲解“Java SimpleDateFormat线程不安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java SimpleDateFormat线程...
      99+
      2023-07-05
    • 如何解决Java中SimpleDateFormat线程不安全的问题
      这篇文章将为大家详细讲解有关如何解决Java中SimpleDateFormat线程不安全的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.什么是线程不安全?线程不安全也叫非线程安全,是指多线程执行中...
      99+
      2023-06-15
    • java的SimpleDateFormat线程不安全怎么办
      这篇文章主要为大家展示了“java的SimpleDateFormat线程不安全怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java的SimpleDateFormat线程不安全怎么办”这篇...
      99+
      2023-06-20
    • 详解SimpleDateFormat的线程安全问题与解决方案
      1. 原因SimpleDateFormat(下面简称sdf)类内部有一个Calendar对象引用,它用来储存和这个sdf相关的日期信息,例如sdf.parse(dateStr), sdf.format(date) 诸如此类的方法参数传入的日...
      99+
      2023-05-31
      simpledateformat 线程 dat
    • SimpleDateFormat线程安全问题排查详解
      目录一. 问题现象二. 原因排查三. 原因分析四. 解决方案一. 问题现象 运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面。 二. 原因排查 首先,检查...
      99+
      2022-11-13
      SimpleDateFormat线程安全排查 SimpleDateFormat线程安全
    • java的SimpleDateFormat线程不安全的几种解决方案
      目录场景SimpleDateFormat线程为什么是线程不安全的呢?验证SimpleDateFormat线程不安全解决方案解决方案1:不要定义为static变量,使用局部变量解决方案...
      99+
      2024-04-02
    • 解决Java中SimpleDateFormat线程不安全的五种方案
      目录1.什么是线程不安全? 线程不安全的代码 2.解决方案 ① 将SimpleDateFormat变为局部变量 ② 使用synchronized加锁 ③ 使用Lock加锁 ④ 使用T...
      99+
      2024-04-02
    • java treemap线程安全问题怎么解决
      要解决Java TreeMap的线程安全问题,有以下几种方法:1. 使用Collections.synchronizedMap()方...
      99+
      2023-10-20
      java
    • Java多线程之线程安全问题怎么解决
      本篇内容主要讲解“Java多线程之线程安全问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java多线程之线程安全问题怎么解决”吧!1.线程安全概述1.1什么是线程安全问题首先我们需要...
      99+
      2023-06-30
    • java中SimpleDateFormat非线程安全问题的示例分析
      小编给大家分享一下java中SimpleDateFormat非线程安全问题的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!SimpleDateFormat非线程安全问题实现1000个线程的时间格式化package&...
      99+
      2023-06-20
    • simpledateformat线程不安全的原因
      这篇文章将为大家详细讲解有关simpledateformat线程不安全的原因,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。原因:在多线程环境下,当多个线程同时使用相同的SimpleDateFormat对象...
      99+
      2023-06-15
    • Java多线程 - 线程安全和线程同步解决线程安全问题
      文章目录 线程安全问题线程同步方式一: 同步代码块方式二: 同步方法方式三: Lock锁 线程安全问题 线程安全问题指的是: 多个线程同时操作同一个共享资源的时候可能会出现业务安全问题,称为线程安全问题。 举例:...
      99+
      2023-08-20
      java 安全 jvm
    • Java线程安全问题的解决方案
      目录线程安全问题演示解决线程安全问题1.原子类AtomicInteger2.加锁排队执行2.1 同步锁synchronized2.2 可重入锁ReentrantLock3.线程本地变...
      99+
      2024-04-02
    • golang map线程安全问题怎么解决
      在Go语言中,Map是并发不安全的,如果多个goroutine同时对同一个Map进行读写操作,可能会导致数据竞争问题。 为了解决Ma...
      99+
      2024-02-29
      golang
    • Java使用线程同步解决线程安全问题详解
      第一种方法:同步代码块: 作用:把出现线程安全的核心代码上锁 原理:每次只能一个线程进入,执行完毕后自行解锁,其他线程才能进来执行 锁对象要求:理论上,锁对象只要对于当前同时执行的线...
      99+
      2024-04-02
    • java单例模式和线程安全问题怎么解决
      这篇文章主要介绍“java单例模式和线程安全问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java单例模式和线程安全问题怎么解决”文章能帮助大家解决问题。单例模式、多实例模式、和线程安全...
      99+
      2023-07-05
    • Java多线程下解决数据安全问题
      目录同步代码块同步方法lock锁同步代码块 基本语句 synchronized (任意对象) { 操作共享代码 } 代码示例 public class SellTicket ...
      99+
      2024-04-02
    • Java多线程之线程安全问题详解
      目录1. 什么是线程安全和线程不安全?2. 自增运算为什么不是线程安全的?3. 临界区资源和竞态条件总结:面试题: 什么是线程安全和线程不安全?自增运算是不是线程安全的?如何保证多线...
      99+
      2024-04-02
    • JavaSimpleDateFormat线程不安全问题
      目录多线程 ——SimpleDateFormat原因分析解决方法解决方法1解决方法2总结多线程 ——SimpleDateFormat ...
      99+
      2023-03-24
      Java多线程不安全 SimpleDateFormat线程不安全
    • Java单例模式中的线程安全问题怎么解决
      今天小编给大家分享一下Java单例模式中的线程安全问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一. 使用多线程...
      99+
      2023-07-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作