首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

为什么阿里Java规约要求谨慎使用SimpleDateFormat

前言 在阿里Java开发规约中,有强制性的提到SimpleDateFormat 是线程不安全的类 ,在使用的时候应当注意线程安全问题,如下: image.png 其实之前已经介绍过使用JDK1.8的...Java8都发布N年了,转LocalDateTime吧。今天,就来说说SimpleDateFormat的线程安全问题。...SimpleDateFormat是非线程安全的 时间处理,基本所有项目上都是需要使用到的,往往很多初学者会把SimpleDateFormat定义为static类型,然后在进行时间转化的时候没有做加锁处理...的时候,都去创建一个SimpleDateFormat实例,保证SimpleDateFormat实例不被共享。...方案三:使用LocalThread 这是阿里Java规约里提到的解决方法之一,之所以可以使用LocalThread来解决此问题,代码改造如下: public class Main { private

51540

还在使用SimpleDateFormat

下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?...先看看《阿里巴巴开发手册》对于SimpleDateFormat是怎么看待的 问题复现 一般我们在使用SimpleDateFormat的时候会把它定义为一个静态变量,避免频繁创建它们的对象实例,代码如下...直接崩了,部分线程获取的时间不对,部分线程报java.lang.NumberFormatException:multiple points错,线程直接挂死了。...多线程不安全原因 因为我们把SimpleDateFormat定义为静态变量,那么多线程下SimpleDateFormat的实例就会被多个线程共享,B线程会读取到A线程的时间,就会出现时间差异和其它各种问题...为什么要这样做 我们参考阿里巴巴的Java开发手册内容: 关于Executors 关于线程名称 再次简单进一步解读下: newFixedThreadPool和newSingleThreadExecutor

51740

Java 泛型〈? extends T 〉和 〈? super T

但实际上Java编译器不允许这个操作。会报错,“装苹果的盘子”无法转换成“装水果的盘子”。 ?...extends T>和的办法,来让”水果盘子“和”苹果盘子“之间发生正当关系。 二、上界 下面就是上界通配符(Upper Bounds Wildcards) ?...四、上下界通配符的副作用 边界让Java不同泛型之间的转换更容易了。但不要忘记,这样的转换也有一定的副作用。那就是容器的部分功能可能失效。 还是以刚才的Plate为例。...extends T>不能往里存,只能往外取 和类型参数的区别就在于,对编译器来说所有的T都代表同一种类型。 比如下面这个泛型方法里,三个T都指代同一个类型,要么都是String,要么都是Integer... ? 但通配符<?

1.1K10

Java 基础篇】Java日期和时间格式化与解析指南:SimpleDateFormat详解

Java 提供了强大的日期和时间处理工具,其中 SimpleDateFormat 类是一个重要的工具,用于格式化日期和时间,同时也支持解析日期和时间。...SimpleDateFormatJava 中的一个类,它属于 java.text 包,用于格式化和解析日期和时间。它允许你将日期和时间对象转换成字符串表示,或者将字符串解析成日期和时间对象。...SimpleDateFormat nyFormat = new SimpleDateFormat```java ("yyyy-MM-dd HH:mm:ss"); nyFormat.setTimeZone...最好将 SimpleDateFormat 对象限制在单个线程内,或使用线程安全的方式处理日期和时间格式化和解析,如 java.time.format.DateTimeFormatter(Java 8及更高版本引入...总结 SimpleDateFormatJava 中处理日期和时间的重要工具,它允许你将日期时间对象格式化成字符串,也可以将字符串解析成日期时间对象。

76920
领券