Java并发编程
文章平均质量分 93
wanger61
这个作者很懒,什么都没留下…
展开
-
线程池源码分析
线程池中有一个interruptIdleWorkers() ,该方法会中断线程池中的空闲线程(没有在执行任务而是阻塞在getTask方法中),可以看到该方法在中断线程前会先去尝试获取worker的lock,如果该worker正在执行任务那么就会被上锁,进而不会被该方法中断。可以看到进入回收方法后,加锁地在 workers(一个存放Workers的HashSet)中移除该Worker,从而完成线程的回收。上面启动了 Worker 内部的线程,线程启动后会去调用 Worker 的 run()方法。原创 2022-08-24 16:58:49 · 335 阅读 · 0 评论 -
Java多线程知识点总结
一. 多线程概述锁有什么作用?有哪些分类?①Java中的锁主要用于保障多并发情况下数据的一致性,线程必须先获取锁才能进行操作,可以保证数据的安全。②从乐观和悲观的角度可以分为乐观锁和悲观锁。③从获取资源的公平性可以分为公平锁和非公平锁。④从是否共享资源的角度可以分为共享锁和排它锁。⑤从锁的状态角度可分为偏向锁、轻量级锁和重量级锁。乐观锁和悲观锁①乐观锁采用乐观的思想处理数据,在每次读取数据时都认为别人不会修改该数据,所以不会上锁。但在更新时会判断在此期间别人有没有更新该数据。Java中的乐观原创 2020-10-18 16:33:31 · 583 阅读 · 1 评论 -
JUC源码详解
AQS与独占获取:https://www.javadoop.com/post/AbstractQueuedSynchronizer#toc4公平锁非公平锁与Condition:https://www.javadoop.com/post/AbstractQueuedSynchronizer-2原创 2020-10-09 20:34:34 · 356 阅读 · 0 评论 -
final关键字的内存语义
https://www.cnblogs.com/senlinyang/p/7875468.html原创 2020-10-08 20:12:06 · 96 阅读 · 0 评论 -
既然synchronized是"万能"的,为什么还需要volatile呢?
01 synchronized的问题我们都知道synchronized其实是一种加锁机制,那么既然是锁,天然就具备以下几个缺点:1.1 有性能损耗虽然在JDK 1.6中对synchronized做了很多优化,如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等,但是他毕竟还是一种锁。以上这几种优化,都是尽量想办法避免对Monitor进行加锁,但是,并不是所有情况都可以优化的,况且就算是经过优化...转载 2020-02-11 20:22:29 · 515 阅读 · 0 评论