多线程环境下SimpleDateFormat类安全转换

2024-06-21 21:08

本文主要是介绍多线程环境下SimpleDateFormat类安全转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、SimpleDateFormat类

package state;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*** SimpleDateFormat类负责日期的转换与格式化*  解决SimpleDateFormat类多线程环境下转换错误问题* @author zc**/
public class SimpleDateFormatThread  extends Thread{private SimpleDateFormat sdf;private String dateString;public SimpleDateFormatThread(SimpleDateFormat sdf,String dateString) {super();this.sdf =sdf;this.dateString =dateString;}@Overridepublic void run() {try {//System.out.println(dateString);//刚开始日期格式设置错误为YYYY-MM-ddDate date =DateTools.getSimpleDateFormat("yyyy-MM-dd").parse(dateString);// System.out.println(date);String newDateString =DateTools.getSimpleDateFormat("yyyy-MM-dd").format(date).toString();if(!newDateString.equals(dateString)) {System.out.println("ThreadName="+this.getName()+"报错日期"+dateString+" 转换日期"+newDateString);}else {System.out.println("ThreadName="+this.getName()+"日期"+dateString+"   转换日期"+newDateString);}} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd");String[] dateStringArray =new String[]{"2020-02-05","2020-02-06","2020-02-07","2020-02-08"};SimpleDateFormatThread []threadArray= new SimpleDateFormatThread[4];for(int i=0;i<4;i++) {threadArray[i] =new SimpleDateFormatThread(sdf,dateStringArray[i]);}for(int i=0;i<4;i++) {threadArray[i].start();}}
}class DateTools{//ThreadLocal能使线程绑定到指定的对象private static ThreadLocal<SimpleDateFormat> t = new ThreadLocal<SimpleDateFormat>();public static SimpleDateFormat getSimpleDateFormat(String datePattern) {SimpleDateFormat sdf=null;sdf =t.get();if(sdf==null) {sdf =new SimpleDateFormat(datePattern);t.set(sdf);	}return sdf;}
}

二、线程状态和线程组

(1)线程5状态

//NEW 尚未启动的线程
//RUNNABLE Java虚拟机中执行的线程
//TERMINATED 已经退出的线程
//BLOCKED 阻塞受监视的线程
//WAITING 无限等待另一个线程
//TIMED_WAITING 等待另一个线程指定时间

package state;
/***  线程中状态和线程组* @author zc**/
public class MyThread extends Thread{//NEW//RUNNABLE//TERMINATED//BLOCKED//WAITING//TIMED_WAITINGpublic MyThread() {System.out.println("构造方法中的状态: "+Thread.currentThread().getState());}@Overridepublic void run() {System.out.println("run方法中的状态:"+Thread.currentThread().getState());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {MyThread myThread = new MyThread();System.out.println("main方法中的状态1 "+ myThread.getState());Thread t1 =  new Thread();Thread t2 =  new Thread();ThreadGroup group =new ThreadGroup("左氏线程组");Thread t3 =  new Thread(group,t1);Thread t4 =  new Thread(group,t2);t3.start();t4.start();System.out.println("活动的线程数量为:  " +group.activeCount());System.out.println("线程组的名称为:  "+group.getName());try {myThread.start();Thread.sleep(1000);System.out.println("main方法中的状态2  "+ myThread.getState());} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

这篇关于多线程环境下SimpleDateFormat类安全转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082342

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤