多线程环境下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

相关文章

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2