
juc
文章平均质量分 90
juc学习笔记
被拯救的威尼斯
这个作者很懒,什么都没留下…
展开
-
JUC 笔记 10
线程安全集合类可以分为三大类:遗留的线程安全集合遗留的线程安全集合如 Hashtable , Vector使用 Collections 装饰的线程安全集合使用 Collections 装饰的线程安全集合,如:JUC下的安全集合: Blocking、CopyOnWrite、Concurrent重点介绍 java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面包含三类关键词: Blocking、CopyOnWrite、Concurrent。原创 2024-06-11 15:13:56 · 1063 阅读 · 0 评论 -
JUC 笔记 9
ˈsaɪklɪk ˈbæriɚ] 循环栅栏,用来进行线程协作,等待线程满足某个计数。构造时设置『计数个数』,每个线程执行到某个需要“同步”的时刻调用 await() 方法进行等待,当等待的线程数满足『计数个数』时,继续执行.其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来让计数减一。这里不用 CountDownLatch;,应该也可以,future#get本来就是阻塞的。用来进行线程同步协作,等待所有线程完成倒计时。可以配合线程池使用,改进如下。原创 2024-06-06 09:42:06 · 251 阅读 · 0 评论 -
JUC 笔记 8
信号量基本使用[ˈsɛməˌfɔr] 信号量,用来限制能同时访问共享资源的线程上限。结果。原创 2024-06-03 09:31:33 · 954 阅读 · 0 评论 -
JUC 笔记 7
1. * AQS 原理1. * AQS(AbstractQueuedSynchronizer) 原理1. 概述全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架AbstractQueuedSynchronizer有一个静态内部类Node,属性有volatile Thread thread;volatile Node prev;volatile Node next;volatile int waitStatus;Node nextWaiter;原创 2024-05-27 13:35:11 · 947 阅读 · 0 评论 -
juc 笔记 6
*** 任务拒绝策略*//*** 任务队列// 1. 任务队列 private Deque < T > queue = new ArrayDeque < >();// 2. 锁 private ReentrantLock lock = new ReentrantLock();// 3. 生产者条件变量 private Condition fullWaitSet = lock . newCondition();原创 2024-04-25 16:08:51 · 815 阅读 · 1 评论 -
juc 笔记 5
5. 享模型之内存volatile可以解决 可见性 和 有序性 问题,但不能处理原子性问题.synchronized 则对于 可见性,有序性,原子性 都可以解决5.1 Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面● 原子性 - 保证指令不会受到线程上下文切换的影响● 可见性 - 保证指令不会受 cpu 缓存的影响● 有序性 - 保证指令不会受原创 2024-04-23 17:10:54 · 742 阅读 · 0 评论 -
juc 笔记 4
● 另外如果由于某个线程进入了死循环,导致其它线程一直等待,对于这种情况 linux 下可以通过 top 先定位到CPU 占用高的 Java 进程,再利用 top -Hp 进程id 来定位是哪个线程,最后再用 jstack 排查。● 第二,如果有些干扰线程错误地 notify 了 wait 线程,条件不满足时还要重新等待,使用了 while 循环来解决此问题。很多教程中把饥饿定义为,一个线程由于优先级太低,始终得不到 CPU 调度执行,也不能够结束,饥饿的情况不。原创 2024-03-28 15:34:17 · 770 阅读 · 0 评论 -
juc笔记 3
● obj.wait() 让进入 object 监视器的线程到 waitSet 等待● obj.notify() 在 object 上正在 waitSet 等待的线程中挑一个唤醒● obj.notifyAll() 让 object 上正在 waitSet 等待的线程全部唤醒它们都是线程之间进行协作的手段,都属于 Object 对象的方法。必须获得此对象的锁,才能调用这几个方法log.debug("执行....");// 让线程在obj上一直等待下去。原创 2024-03-14 10:04:25 · 893 阅读 · 1 评论 -
juc笔记2
4位的Java对象年龄。● 在 Thread-2 上锁的过程中,如果 Thread-3,Thread-4,Thread-5 也来执行 synchronized(obj),就会进入EntryList BLOCKED。● 在 Java 6 之后自旋锁是自适应的,比如对象刚刚的一次自旋操作成功过,那么认为这次自旋成功的可能性会高,就多自旋几次;当(某类型对象)撤销偏向锁阈值超过 20 次后,jvm 会这样觉得,我是不是偏向错了呢,于是会在给(所有这种类型的状态为偏向锁的)对象加锁时重新偏向至新的加锁线程。原创 2024-03-03 21:11:05 · 832 阅读 · 0 评论 -
JUC笔记1
● RUNNABLE 当调用了 start() 方法之后,注意,Java API 层面的 RUNNABLE 状态涵盖了 操作系统 层面的【可运行状态】、【运行状态】和【阻塞状态】(由于 BIO 导致的线程阻塞,在 Java 里无法区分,仍然认为是可运行)当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的。原创 2024-02-22 22:21:23 · 879 阅读 · 1 评论