系列十、ThreadLocal的使用场景

一、ThreadLocal的使用场景

(1)使用日期工具类,当用到SimpleDateFormat时,使用ThreadLocal保证线程安全;

(2)全局存储用户信息(用户信息存入ThreadLocal,那么当前线程在任何地方需要时,都可以使用);

(3)保证同一个线程,获取的数据库连接Connection是同一个,使用ThreadLocal来解决线程安全问题;

二、 SimpleDateFormat线程不安全

2.1、SimpleDateFormatUtil

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/22 15:25* @Description:*/
public class SimpleDateFormatUtil {private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static Date parseDate(String dateString) {Date date = null;try {date = sdf.parse(dateString);} catch (Exception e) {e.printStackTrace();}return date;}}

2.2、SimpleDateFormatMainApp  

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/22 15:27* @Description:*/
public class SimpleDateFormatMainApp {/*** 线程池*/static final ExecutorService pool = new ThreadPoolExecutor(2,10,2L,TimeUnit.SECONDS,new ArrayBlockingQueue<>(20),Executors.defaultThreadFactory(),// new ThreadPoolExecutor.AbortPolicy// new ThreadPoolExecutor.CallerRunsPolicy// new ThreadPoolExecutor.DiscardOldestPolicynew ThreadPoolExecutor.DiscardOldestPolicy());public static void main(String[] args) {for (int i = 1; i <= 5; i++) {pool.execute(() -> {System.out.println(String.format(String.format(Thread.currentThread().getName() + "===>" + SimpleDateFormatUtil.parseDate("2023-11-11 18:00:00"))));});}}}

三、 SimpleDateFormat线程不安全(解决)

3.1、SimpleDateFormatUtil

/*** @Author : 一叶浮萍归大海* @Date: 2023/11/22 15:25* @Description:*/
public class SimpleDateFormatUtil {private static final ThreadLocal<SimpleDateFormat> threadLocal = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));public static Date parseDate(String dateString) {Date date = null;try {date = threadLocal.get().parse(dateString);} catch (Exception e) {e.printStackTrace();}return date;}}

3.2、SimpleDateFormatMainApp 

同上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/206240.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于JAVA的开放实验室管理系统

项目编号&#xff1a; S 013 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S013&#xff0c;文末获取源码。} 项目编号&#xff1a;S013&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…

人工智能和AR/VR:AI在AR和VR中扮演什么角色?行业应用有哪些?

增强现实技术和虚拟现实技术&#xff08;AR/VR&#xff09;发展前景广阔&#xff0c;备受各大企业关注。事实上&#xff0c;近四分之三的行业领导者表示&#xff0c;他们预计这些沉浸式技术将于未来五年内成为主流。高盛公司报告称&#xff0c;到2025年&#xff0c;AR/VR行业值…

Ubuntu安装PCAN-View

目录 一. Hardware 二. Software 2.1 安装驱动 2.2 安装PCAN-View QA 本文介绍如何安装linux版的PCAN-View。 PCAN-View&#xff1a;用来抓包分析CAN/CANFD报文。Hardware: PEAK-System Linux generic #37~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Oct 9 15:34:04 UTC 2…

图解系列--密钥,随机数,应用技术

密钥 1.生成密钥 1.1.用随机数生成密钥 密码学用途的伪随机数生成器必须是专门针对密码学用途而设计的。 1.2.用口令生成密钥 一般都是将口令输入单向散列函数&#xff0c;然后将得到的散列值作为密钥使用。 在使用口令生成密钥时&#xff0c;为了防止字典攻击&#xff0c;需要…

好题分享(2023.11.12——2023.11.18)

目录 ​ 前情回顾&#xff1a; 前言&#xff1a; 题目一&#xff1a;《有效括号》 思路&#xff1a; 总结&#xff1a; 题目二&#xff1a;《用队列实现栈》 思路&#xff1a; 总结&#xff1a; 题目三&#xff1a;《用栈实现队列》 思路&#xff1a; 总结 &#x…

【Vue】生命周期一文详解

目录 前言 生命周期 钩子函数使用方法 ​编辑 周期-----创建阶段 创建阶段做了些什么事 该阶段可以干什么 周期----挂载阶段 挂载阶段做了什么事 该阶段适合干什么 周期----更新阶段 更新阶段做了什么事 该阶段适合做什么 周期----销毁阶段 销毁阶段做了什么事 …

MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(一)

在嵌入式系统开发中&#xff0c;选择一个合适的图形用户界面&#xff08;GUI&#xff09;库是至关重要的。在屏幕上显示的时候&#xff0c;使用现成的图形库&#xff0c;这样开发人员就不需要弄清楚底层任务&#xff0c;例如如何绘制像素、线条、形状&#xff0c;如果再高级一点…

图片上的水印怎么去除掉?水印云提供一键解决方案!

在快节奏的数字世界中&#xff0c;图像和视频现已成为我们生活的重要组成部分。从热门名人到热门电视节目&#xff0c;在线内容每天都会引发争论&#xff0c;吸引了大量观众。对于铁杆粉丝来说&#xff0c;每一条新内容都是捕捉难忘时刻的机会——无论是名人富有感染力的微笑、…

Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)

Linux进程理解[冯诺依曼体系结构,操作系统,进程概念和基本操作] 一.冯诺依曼体系结构1.冯诺依曼体系结构的说明2.冯诺依曼体系结构的价值1.冯诺依曼之前的计算机的局限2.为什么在计算机体系结构当中要存在内存? 二.操作系统1.什么是操作系统2.操作系统如何进行管理3.为什么要有…

K8S部署mongodb-sharded-cluster(7.0.2)副本分片

添加源 helm repo add bitnami https://charts.bitnami.com/bitnami指定版本拉取 helm pull --repo https://charts.bitnami.com/bitnami mongodb-sharded --version 7.0.5安装时选择SCRAM-SHA-1默认是SCRAM-SHA-256 helm install -n prod mymongodb mongodb-sharded --value…

react大文件上传

目录 大文件上传优点&#xff1a; 大文件上传缺点: 大文件上传原理&#xff1a; 为什么要用md5 实现流程&#xff1a; 部分代码1&#xff1a; 部分代码2&#xff1a;​ 大文件上传优点&#xff1a; 文件太大分片上传能加快上传速度,提高用户体验能断点续传 如果上次上传失败…

vue2中的props属性

vue2中的props属性 props传递&使用 调用子组件是创建子组件的实例 传递属性&#xff1a;:a"a"&#xff0c;非字符串都用v-bind created: 属性 状态 computed watch都处理好了 会被挂载到实例上get/set劫持&#xff1a;get获取最新&#xff0c;set目的抛出错误 修…