多线程
文章平均质量分 95
夜光下丶
新人初学,请多指教!
展开
-
CLH介绍
在并发编程中,锁是一种常用的保证线程安全的方法。Java 中常用的锁主要有两类,一种是 Synchronized 修饰的锁,被称为 Java 内置锁或监视器锁。另一种就是在 J2SE 1.5版本之后的 java.util.concurrent包(下称JUC包)中的各类同步器,包括 ReentrantLock(可重入锁),ReentrantReadWriteLock(可重入读写锁),Semaphore(信号量),CountDownLatch 等。原创 2024-10-18 14:23:03 · 892 阅读 · 0 评论 -
ThreadLocal
ThreadLocal 类用来提供线程内部的局部变量,这种变量在多线程环境下访问(通过 get 和 set 方法访问)时能保证各个线程的变量相对独立于其他线程内的变量,分配在堆内的TLAB中ThreadLocal 实例通常来说都是类型的,属于一个线程的本地变量,用于关联线程和线程上下文。每个线程都会在 ThreadLocal 中保存一份该线程独有的数据,所以是线程安全的。原创 2024-10-18 15:24:56 · 819 阅读 · 0 评论 -
AQS原理分析
AQS 通过提供 state 及 FIFO 队列的管理,为我们提供了一套通用的实现锁的底层方法,基本上定义一个锁,都是转为在其内部定义 AQS 的子类,调用 AQS 的底层方法来实现的,由于 AQS 在底层已经为了定义好了这些获取 state 及 FIFO 队列的管理工作,我们要实现一个锁就比较简单了,我们可以基于 AQS 来实现一个非可重入的互斥锁,如下所示@Override@Override@Override。原创 2024-10-19 12:02:10 · 763 阅读 · 0 评论 -
Unsafe
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升 Java 运行效率、增强 Java 语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使 Java 语言拥有了类似 C 语言指针一样操作内存空间的能力,这无疑也增加了程序发生相关指针问题的风险。在程序中过度、不正确使用Unsafe类会使得程序出错的概率变大,使得 Java 这种安全的语言变得不再“安全”,因此对Unsafe的使用一定要慎重。原创 2024-10-19 11:38:14 · 1119 阅读 · 0 评论 -
进程、线程和缓存一致性原理
当 A 号 CPU 核心要修改 Cache 中 i 变量的值,发现数据对应的 Cache Line 的状态是共享状态,则要向所有的其他 CPU 核心广播一个请求,要求先把其他核心的 Cache 中对应的 Cache Line 标记为「无效」状态,然后 A 号 CPU 核心才更新 Cache 里面的数据,同时标记 Cache Line 为「已修改」状态,此时 Cache 中的数据就与内存不一致了。而「已失效」状态,表示的是这个 Cache Block 里的数据已经失效了,不可以读取该状态的数据。原创 2024-10-18 15:30:01 · 760 阅读 · 0 评论 -
CAS介绍
CAS(Compare And Swap 比较并且替换)是乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。原创 2024-10-18 15:28:30 · 992 阅读 · 0 评论 -
Java Memory Model
特性volatile关键字synchronized关键字Lock接口Atomic变量原子性无法保障可以保障可以保障可以保障可见性可以保障可以保障可以保障可以保障有序性一定程度可以保障可以保障无法保障。原创 2024-10-18 15:27:19 · 1070 阅读 · 0 评论 -
LockSupport
LockSupport.park()休眠线程,LockSupport.unpark()唤醒线程,两个方法配合使用。也可以通过LockSupport.parkNanos()指定休眠时间后,自动唤醒。LockSupport.park()不会释放monitor锁。线程被打断,LockSupport.park()不会抛出异常,也不会吞噬掉interrupt的状态,调用者可以获取interrupt状态,自行进行判断,线程是由于什么原因被唤醒了。原创 2024-10-18 14:07:39 · 1061 阅读 · 0 评论
分享