SimpleDateFormat线程安全问题解决方案

package com.itheima.netty_chat.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class DateUtils {

    private static final Map<String, ThreadLocal<SimpleDateFormat>> allPattern
                            = new ConcurrentHashMap<String, ThreadLocal<SimpleDateFormat>>();

    static {
        String[] patternArrays = new String[]{
                "yyyy-MM-dd HH:mm:ss",
                "yyyy-MM-dd HH:mm",
                "yyyy-MM-dd HH",
                "yyyy-MM-dd"
        };
        for (final String pattern : patternArrays) {
            allPattern.put(pattern, new ThreadLocal<SimpleDateFormat>(){
                @Override
                protected SimpleDateFormat initialValue() {
                    return new SimpleDateFormat(pattern);
                }
            });
        }
    }

    public static Date parse(String dateStr, String pattern) throws ParseException{
        return allPattern.get(pattern).get().parse(dateStr);
    }

    public static void main(String[] args) {
        try {
            Date d = DateUtils.parse("2019-02-11 21:36:30", "yyyy-MM-dd HH:mm:ss");
            System.out.println(d);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

原文地址:https://www.cnblogs.com/smileblogs/p/10363650.html

时间: 2024-08-05 09:27:24

SimpleDateFormat线程安全问题解决方案的相关文章

servlet线程安全问题

由于默认情况下Servlet,在内存中只有一个实例对象,当多个浏览器并发访问Servlet时就有可能产生线程安全问题 解决方案: 1.加锁--效率降低 synchronized(this){  } 2.SingleThreadModel接口 -- 不能真的防止线程安全问题 在服务器的内部维护一个对象池,放servlet的对象,一个请求过来,会到池里检查一下有没有这个servlet,如果没有,创建一个给当前线程使用,使用完的就放回池里.如果第一个线程使用的servlet对象还没有还回池里,第二线程

SimpleDateFormat 的线程安全问题与解决方案

SimpleDateFormat 的线程安全问题 SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. 但是 SimpleDateFormat 并不是一个线程安全的类,在多线程并发访问下会出现问题.通过以下代码进行检验, public class ProveNotSafe { static SimpleDateFormat df = new SimpleDateForma

关于 SimpleDateFormat 的非线程安全问题及其解决方案

1.问题: 先来看一段可能引起错误的代码: package test.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class ProveNotSafe { static SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy&qu

并发条件下SimpleDateFormat线程不安全及解决方案

1.使用线程池创建并发环境解析日期 package com.zh.time; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util

线程安全问题的解决方案

/* 进程: 进程就是正在运行的应用程序. 进程了负责了内存空间划分. 线程: 一个进程中的 代码是由线程去执行的,线程也就是进程中一个执行路径. 多线程: 一个进程中有多个线程可以同时执行任务. 多线程 的好处: 1. 解决一个进程中可以同时执行多个任务的问题. 2. 提高了资源利用率. 多线程的弊端: 1. 增加了cpu的负担. 2. 降低了一个进程中线程 的执行概率. 3. 出现了线程 安全问题. 4. 会引发死锁现象. 自定义线程 的实现方式: 方式一 : 1. 自定义一个类继承Thre

SimpleDateFormat的线程安全问题

SimpleDateFormat在进行日期格式转换时用的很多,但是 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题  * <p>  * Date formats are not synchronized.  * It is recommended to create separate format instances for each thread.  * If multi

SimpleDateFormat使用和线程安全问题

SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类. 它允许格式化 (date -> text).语法分析 (text -> date)和标准化. SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动. 但是,希望用 DateFormat 中的 getTimeInstance. getDateInstance 或 getDateTimeInstance 创建一个日期-时间格式化程序. 每个类方法返回一个以缺省格式化方式初始化的日期/

(转)关于SimpleDateFormat安全的时间格式化线程安全问题

想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避免问题.下面我们通过一个具体的场景来一步步的深入学习和理解SimpleDateFormat类. 一.引子 我们都是优秀的程

iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 多线程的四种解决方案:pthread,NSThread,GCD,NSOperation 线程安全问题 NSThread的使用 GCD的理解与使用 NSOperation的理解与使用 Demo在这里:WHMultiThreadDemo Demo的运行gif图如下: 一.多线程的基本概念 进程:可以理解成一个运行中的应用程序,是系统进行资源分配和调度的基本单位,是操作