美文网首页
Java8提供的LocalDate和DateTimeFormat

Java8提供的LocalDate和DateTimeFormat

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-05-23 20:53 被阅读0次

Java8提供的LocalDate和DateTimeFormat是如何保证线程安全的?

分析一下源码。

LocalDate类是final类型的,也就是说,LocalDate是不可变的,一旦实例化,值就固定了。

而java8之前的Date类不是final的。

final关键字的内存语义

1,写final域的重排序规则:JMM禁止编译器把final域的写重排序到构造函数初始化之外(之后)。编译器会在final域的写之后,构造函数return之前,插入一个StoreStore内存屏障。

2,读final域的重排序规则:在一个线程中,初次读对象引用与初次读该对象包含的final域,JMM禁止重排序这2个操作。编译器会在读final域操作的前面插入一个LoadLoad屏障。

解读:读final域的重排序规则可以确保,在读一个对象的final域之前,一定会先读这个final域的对象引用。也就是说,可以确保final修饰的对象this.field==field是true。但是普通的非final修饰的对象,不能确保this.field==field是true。

看一下下面的代码,如何让n不等于n

Java8提供的LocalDate和DateTimeFormat是如何保证线程安全的?

那么我要问了,final修饰的类的实例,都是线程安全的吗?

相关文章

网友评论

      本文标题:Java8提供的LocalDate和DateTimeFormat

      本文链接:https://www.haomeiwen.com/subject/agkizqtx.html