多线程
文章平均质量分 52
juc学习
CRE_MO
Better
展开
-
【JUC】20-邮戳锁StampedLock
StampedLock用于解决写锁饥饿问题。读没有结束的时候,也可以加写锁。原创 2024-09-21 23:25:57 · 307 阅读 · 0 评论 -
【JUC】19-读写锁
一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。写锁被获取后,可以再次获取写锁或读锁。读锁被获取后,可以再次获取写锁。原创 2024-09-21 22:36:33 · 221 阅读 · 0 评论 -
【JUC】18-AQS
emsp;如果共享资源被占用,需要一定的阻塞等待唤醒机制保证锁分配。这个机制基于CLH队列的变体实现,将暂时获取不到锁的线程加入队列中,这个队列就是AQS同步队列的抽象表现。它将要请求共享资源的线程及自身的等待状态封装成队列的结点对象,通过CAS、自旋以及LockSupport.park() 的方式,维护state变量的状态,使并发达到同步效果。原创 2024-09-21 15:50:05 · 124 阅读 · 0 评论 -
【JUC】17-Synchronized锁升级
无锁->偏向锁->轻量级锁->重量级锁synchronized属于重量级锁,monitor是基于底层os的mutex Lock实现了,挂起线程和恢复线程都需要内核态完成,都需要切换CPU状态来完成。1.对象被某个线程锁住,则该对象。原创 2024-09-18 16:53:34 · 879 阅读 · 0 评论 -
【JUC】16-Java对象内存布局和对象头
在HotSpot虚拟机里,对象在堆内存中的存储布局可以分为三个部分:对象头、实例数据和对齐填充。:由对象标记和类型指针。原创 2024-09-13 10:55:01 · 409 阅读 · 0 评论 -
【JUC】15-ThreadLocal线程局部变量
ThreadLocal提供线程局部变量。每个线程在访问ThreadLocal实例的时候都有自己的、独立的变量副本。ThreadLocal实例通常是类中的私有静态字段,使用它的目的是希望将状态(用户ID或事务ID)与线程关联起来。ThreadLocal要及时清除。原创 2024-09-12 16:04:18 · 322 阅读 · 0 评论 -
【JUC】14-LongAddr源码分析
LongAdder在无竞争的情况,跟AtomicLong一样,对同一个base进行操作,当出现竞争关系时则是采用化整为零分散热点的做法,用空间换时间,用一个数组cells,将一个value拆分进这个数组cells。当所有线程操作完毕,将数组cells的所有值和base都加起来作为最终结果。LongAddr基本思想是分散热点,将value值分散到一个Cell数组中,不同线程会命中到数组的不同槽中,各个线程只对自己槽中的那个值进行CAS操作,这样热点就被分散了,冲突概率就很小。原创 2024-09-10 20:03:13 · 702 阅读 · 0 评论 -
【JUC】13-原子类
CountDownLatch实现线程等待。原创 2024-09-09 16:48:23 · 344 阅读 · 0 评论 -
【JUC】12-CAS
compare and swap,比较并交换。包含三个操作数:内存位置、预期原值及更新值。CAS是JDK提供的非阻塞原子性操作,通过硬件保证比较-更新的原子性。底层实现为CPU指令cmpxchg,效率更高。通过unsafe类实现。原创 2024-09-04 22:32:32 · 414 阅读 · 0 评论 -
【JUC】11-volatile关键字
不支持原子性。原创 2024-09-04 16:02:53 · 330 阅读 · 0 评论 -
【JUC】10-Java内存模型JMM
在JMM中,如果一个操作执行的结果需要对另一个操作可见或者代码重排序,那么这两个操作之间必须存在happens-before(先行发生原则)。线程A修改了数据x,但还没有写回主内存,线程B读取了主内存中的x。JMM控制实现线程修改变量的通知。原创 2024-09-02 15:52:25 · 331 阅读 · 0 评论 -
【JUC】09-线程等待与唤醒
unpark只能产生一个permit,且可以提前产生,原创 2024-09-01 21:40:52 · 257 阅读 · 0 评论 -
【JUC】08-中断机制之中断协商机制
一个线程应该自己主动去中断。所以Thread.stop, Thread.suspend, Thread.resume都已经被废弃。其他线程设置中断标识位为true,本线程会自行决定是否需要结束本线程。原创 2024-09-01 17:02:24 · 249 阅读 · 0 评论 -
【JUC】07-死锁
死锁指的是两个或以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。原创 2024-08-18 21:11:39 · 230 阅读 · 0 评论 -
【JUC】06-可重入锁
【代码】【JUC】06-可重入锁。原创 2024-08-18 21:00:41 · 191 阅读 · 0 评论 -
【JUC】05-公平锁和非公平锁
【代码】【JUC】04-公平锁和非公平锁。原创 2024-08-15 10:36:12 · 106 阅读 · 0 评论 -
【JUC】04-synchronized关键字
static synchronized锁的是Object模板类,synchronized锁是实例锁。有两个monitorexit是为了防止出现异常,保证锁一定会被释放。代码中有抛异常的只会有一个monitorexit。方法被static和synchronized修饰时,synchronized锁是类锁而不是实例锁,也即锁的是模板类。synchronized锁的是整个资源类。同一时刻,只能有一个线程访问被synchronized修饰的方法。原创 2024-08-13 22:24:55 · 394 阅读 · 0 评论 -
【JUC】03-CompletableFuture使用
CompletableFuture可以进行回调通知、创建异步任务、多个任务前后依赖可以组合处理、对计算速度选最快。CompletableFuture提供了一种类似于观察者模式的通知方式,可以在任务完成后通知监听方。CompletableFuture实例化用CompletableFuture.runAsync()和CompletableFuture.supplyAsync()。原创 2024-08-07 19:51:38 · 313 阅读 · 0 评论 -
【JUC】02-FutureTask
Future用于处理异步同时任务。FutureTask继承了RunnableFuture,可以使用Runnable和Callable进行初始化,下面为使用FutureTask的一个例子。优点:future+ThreadPool异步多线程任务配合,能显著提高程序的执行效率。原创 2024-08-07 10:51:48 · 141 阅读 · 0 评论 -
【JUC】01-进程、线程和管程
java线程通过start()启动,主要内容在native的方法start0中。原创 2024-08-06 16:16:06 · 538 阅读 · 0 评论