Poison


  • 首页

  • 归档

  • 标签

  • 搜索
close
Poison

Java Memory Model

发表于 2021-08-14

内存模型描述了程序的可能行为,实现可以自由地生成代码,只要程序的执行结果与内存模型预测的一致即可。这为实现者提供了执行代码转换的自由,包括重排序及删除不必要的同步。

阅读全文 »
Poison

volatile

发表于 2021-08-13

通常,为了确保共享变量一致且可靠地更新,线程应该通过获取锁来确保它独占使用这些变量,该锁通常对这些共享变量强制互斥。Java 编程语言提供了第二种机制,即 volatile 字段,在某些场景下,它比使用锁更方便。一个字段可以被声明为 volatile,在这种情况下,Java 内存模型确保所有线程看到变量的一致值。

阅读全文 »
Poison

FileLock

发表于 2021-08-11

File locks are held on behalf of the entire Java virtual machine. They are not suitable for controlling access to a file by multiple threads within the same virtual machine.

Reference

FileLock (Java Platform SE 8 )
OverlappingFileLockException (Java Platform SE 8 )
Is FileLock in java safe across multiple threads within the same process or between different processes or both?
Example of inter-process and inter-thread file locking in Java · GitHub

Poison

Factory

发表于 2021-08-09

最近处理应用性能问题时分析栈帧时发现部分线程名称为类似 pool-15-thread-2841 的模式,经过排查,原因为开发创建自定义线程池时未指定线程工厂导致,默认会使用 Executors.defaultThreadFactory() 实现。

阅读全文 »
Poison

Collections.shuffle(List)

发表于 2021-08-08

Java 中 Collections.shuffle(List<?>) 方法的实现基于 Fisher–Yates shuffle 算法,核心的思想用几行代码即可表述:

1
2
3
for (int i = size; i > 1; i--){
swap(arr, i - 1, rnd.nextInt(i));
}

在 Collections.shuffle(List<?>) 方法实现中对不支持随机访问的数据结构进行了适配,如当前 List<?> 实现为链表时,在元素个数大于等于 5 个时,先将链表转换为支持随机访问的数据结构:数组,然后再对每个索引上的元素进行交换,最后再转换回链表,以保证算法运行时间为线性时间。

阅读全文 »
1…181920…26

130 日志
119 标签
GitHub LeetCode
© 2025 Poison 蜀ICP备16000644号
由 Hexo 强力驱动
主题 - NexT.Mist