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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.