JUC的深入学习
文章平均质量分 90
木 木 水.
变化不会带来进化, 但是进化都是从变化开始的 , 变成光吧!!!
展开
-
深入学习JUC,深入了解Java线程中死锁与活锁问题,并理解其解决方法,笔记开记!!!
这种做法可能严重浪费资源,可能导致饥饿现象.个别线程长时间占用某个资源, 导致该资源的进程迟迟无法运行.比如一个进程把一个数加到20就退出 , 一个数减到0就退出 ,他们两个一起执行就不会成功.同一个线程如果首次获取了这把锁, 那么因为它是这把锁的拥有者, 因此有权利再次获得这把锁.就是两个线程互相占有自己的锁, 却又尝试获取别人的锁, 导致进入死锁状态.,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。, 这样就不会再有请求了. 但是资源利用率会降低。一旦运行,资源将不可剥夺.原创 2023-09-27 18:30:11 · 367 阅读 · 1 评论 -
深入学习JUC,深入了解Java线程中的锁,及锁的实现原理,底层的知识又增加了!!!
重量级锁竞争时,还可以使用自旋来进行优化,如果当前线程自旋成功,就是持锁线程退出了synchronized代码块,释放了锁,这时候可以避免线程阻塞,防止因为阻塞带来的上下文切换。如果尝试加上轻量级锁的过程中, CAS操作无法成功, 这时就是有其他线程为此锁对象加上了轻量级锁,说明存在了竞争了,这时需要进行锁膨胀, 把轻量级锁升级为重量级锁。需要锁住的临界区必须是对同一个对象加锁,同时多线程操作临界区时,不能一个线程加锁,一个不加,不然无法实现,临界区内的代码对外是不可分割的,不会被线程切换打断。原创 2023-09-22 21:40:37 · 330 阅读 · 1 评论 -
深入学习JUC,深入了解Java线程的常见方法与底层原理,带你了解从未深入的底层!!!
park 和 unpark是以线程为单位来阻塞和唤醒线程, 而notify只能唤醒一个等待线程, 而notifyAll可以唤醒所以等待线程, 就不那么精确。,较大的优先级能提高线程被CPU调度的机率 , 只是提高几率, 具体谁先执行还是看操作系统.,同时局部变量, 操作数栈, 返回地址等等都会保存在栈中, 以便于切换时恢复使用.JVM中由堆, 栈, 方法区所组成 , 栈中的内存给线程使用.**法 ,进入锁的waitset,如果线程结束, 则唤醒.等待一个线程结束, 或者指定一个超时时间,最多等待n毫秒。原创 2023-09-20 20:01:13 · 124 阅读 · 1 评论