- 博客(9)
- 收藏
- 关注
原创 volatile 的作⽤及背后的原理
当一个共享变量被volatile修饰时,编译器会在该变量的读/写操作前后插入内存屏障(memory barrier),以确保指令按照程序顺序执行,从而避免指令重排序导致的线程安全问题。:编译器在优化代码时可能会对指令进行重排序,但是加了volatile关键字后,编译器会在该变量的读/写操作前后插入内存屏障(memory barrier)来禁止指令重排序。这种情况下,虽然每个线程的操作都是原子的,但是由于指令重排序的存在,最终的结果却是错误的。线程1先读取A的值,然后将A加1,接着将结果写回A。
2024-01-15 23:30:54 312
原创 Java8-Optional类的使用
如果 value 非 null ,则创建一个包含了指定 T 类型的 value 值的 Optional 实例,否则创建一个空的 Optional 实例。如果值存在,则将 map 应用到该值上并返回应用后的结果,如果值不存在,则返回一个空的 Optional。如果存在值,并且值与给定谓词匹配,则返回描述值的 Optional,否则返回空 Optional。如果值不存在,则什么事情都不做。如果值存在,则返回当前值的哈希值,如果不存在值,则返回 0。如果值存在,则返回包含的值,否则抛出由开发者提供的异常。
2023-04-09 17:04:12 110
原创 Java8-时区日期时间
上一章节 Java 8 新日期时间 API ( 上 ) – 本地日期时间 我们对 Java 8 重新设计的日期时间 API 做了一些基础的介绍,同时详细介绍了和本地时间有关的几个类 LocalDateTime 、LocalDate 和 LocalTime。比如,我们可以使用 ZonedDateTime 的 now() 方法返回当前时区 ( 操作系统时区 ) 的日期时间,调用 parse() 方法可以将一个包含了时区信息的字符串格式的日期时间转化为一个 ZonedDateTime 实例。
2023-04-09 16:59:50 91
原创 Java8-Stream流操作(二)
2 表达式,计算得出 [2,8,18,32] ,然后传递给 Collectors.averagingLong() 计算得到结果为 25.0。Collectors.summingInt() 方法将流中的所有元素视为 int 类型,并计算所有元素的总和 ( sum )s lambda 表达式,计算得出结果为 [1,4,9,16] ,然后再把 [1,4,9,16] 传递给 v->v。Collectors.summingLong() 将流中的所有元素视为 long 类型,并计算所有元素的总和 .
2023-04-01 17:17:43 201 1
原创 Java8-Stream流操作(一)
Java 8 流的新类 java.util.stream.Collectors 实现了 java.util.stream.Collector 接口,同时又提供了大量的方法对流 ( stream ) 的元素执行 map 和reduce 操作,或者统计操作。Collectors.averagingLong() 方法也和 Collectors.averagingDouble() 类似,不同的是它把流中的所有元素看成是 long 类型,并返回一个 double 类型的平均值。Java 文档中描述的原型如下。
2023-04-01 17:09:55 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人