Java8提供的LocalDate和DateTimeFormat

2019-05-23  本文已影响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修饰的类的实例,都是线程安全的吗?

上一篇 下一篇

猜你喜欢

热点阅读