java高并发系列 - 第22天:JUC底层工具类Unsafe
这是java高并发系列第22篇文章,文章基于jdk1.8环境。
本文主要内容
- Unsafe基本介绍
- 获取Unsafe实例
- Unsafe中的CAS操作
- Unsafe中原子操作相关方法介绍
- Unsafe中线程调度相关方法介绍
- park和unpark示例
- Unsafe锁示例
- Unsafe中对volatile的支持
基本介绍
最近我们一直在学习java高并发,java高并发中主要涉及到类位于java.util.concurrent包中,简称juc,juc中大部分类都是依赖于Unsafe来实现的,主要用到了Unsafe中的CAS、线程挂起、线程恢复等相关功能。所以如果打算深入了解JUC原理的,必须先了解一下Unsafe类。
先上一幅Unsafe类的功能图:
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得Java这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。