
Java多线程
文章平均质量分 84
整理的一些重要的Java知识点。
无量寂空
两岸猿声(chengxu猿)啼不住,BUG已过万重山。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程与高并发(五)
1):普通属性原子操作;2):比反射快,直接操纵二进制码;当传入的一参对象被干掉的时候 ,你会收到一个通知( 通知的方式是往队列里扔进一个值 )。//如果你想得到通知,你就不断去检测这个队列里面有没有值。(如果有值说明某个虚引用被回收了)//容器图一定要背过!!!原创 2023-01-13 12:17:36 · 410 阅读 · 0 评论 -
多线程与高并发(四)
volatileAtomicXXX各种JUC同步锁PhaserSemaphoreExchanger//JUC的锁中除了最后的LockSupport之外,其它的都是利用AQS来实现的。原创 2023-01-07 10:18:34 · 708 阅读 · 0 评论 -
多线程与高并发(三)
上面的实验说明了sync锁是可重入的,sync是可以调sync方法的。原创 2022-12-29 13:04:36 · 2781 阅读 · 0 评论 -
多线程与高并发(二)
线程的概念 、 启动方式 、常用方法。//不能用String常量 、Integer 、Long【线程同步】:锁的是对象不是代码;锁this;锁XXX.class;锁定方法和非锁定方法可以同时执行;锁升级过程:偏向锁;自旋锁;系统锁;自旋锁和系统锁各自的使用场景。原创 2022-12-14 22:01:38 · 437 阅读 · 0 评论 -
多线程与高并发(一)
多线程、JVM、操作系统。基础概念JUC同步工具同步容器Disruptor //一个MQ框架,公认的单机环境下效率最高。线程池run方法还是依次顺序执行;( 先run后main , 相当于只有一条执行路径 )但start方法是分支执行。( 有分支路径 )【 线程的方法 】:【 sleep 】:睡眠 ,当前线程暂停一段时间, 让给别的线程去运行。我从CPU上先离开 , 进入到一个等待队列里。当然有可能刚进去就被拽出去执行 , 但更大的可能是——将等待队列中其他的拽原创 2022-12-06 23:15:33 · 264 阅读 · 0 评论 -
synchronized锁升级过程
偏向锁 和 轻量级锁 都是用户空间锁(用户态度锁)—— 我不需要和操作系统打交道。方法m( ) 是 synchronized 修饰的 ,方法m加的锁是O , 方法m里面调用了方法 n( ) , 方法n( ) 加的锁也是O , 所以就相当于给锁O上了两次。原创 2022-11-29 17:53:37 · 1452 阅读 · 0 评论 -
并发编程(三)原子性(2)
乐观锁与悲观锁,CAS概念,CAS中的ABA问题,CAS的底层原子性保障,通过Atomic类深入认识CAS。原创 2022-11-23 14:40:39 · 728 阅读 · 0 评论 -
并发编程(三)原子性(1)
多个线程同时拿到了变量,同时++,然后同时写回去。【一些概念】:race condition => 竞争条件 , 指的是多个线程访问共享数据的时候产生竞争———上述程序中变量n即是共享数据。数据的不一致(unconsistency),并发访问之下产生的不期望出现的结果如何保障数据一致呢?–> 线程同步(线程执行的顺序安排好),monitor (管程) —> 锁critical section -> 临界区如果临界区执行时间长,语句多,叫做 锁的粒度比较粗,反之,就是锁的粒度比较细。原创 2022-11-22 18:27:52 · 604 阅读 · 0 评论 -
并发编程(二)有序性
CPU内存屏障 , 对象的创建过程,新生代,老生代,伊甸区等,指令重排序,hotspot中精简的指令屏障写法,围绕并发编程有序性的一边博文。原创 2022-11-22 10:44:30 · 367 阅读 · 1 评论 -
并发编程(一)可见性
volatile保障线程可见性缓存行缓存一致性协议【volatile的底层实现】:volatile除了保障线程可见性之外 , 它还可以禁止重排序。了解完有序性之后才能真正理解它的底层实现原理。原创 2022-11-19 13:02:42 · 406 阅读 · 1 评论 -
线程的“结束”
【volatile 和 interrupt】:总之,你不依赖于中间精确的次数和精确的时间的话 , 它俩都行。自然结束(能自然结束就尽量自然结束)volatile标志不适合某些场景(比如还没有同步的时候,线程做了阻塞操作,没有办法循环回去)打断时间也不是特别精确,比如一个阻塞容器,容量为5的时候结束生产者,但是,由于volatile同步线程标志位的时间控制不是很精确,有可能生产者还继续生产一段儿时间interrupt() and isInterrupted(比较优雅)原创 2022-11-15 18:21:51 · 325 阅读 · 0 评论 -
线程的“打断”
sleep()方法在睡眠的时候,不到时间是没有办法叫醒的,这个时候可以用interrupt设置标志位,然后呢必须得catch InterruptedException来进行处理,决定继续睡或者是别的逻辑,(自动进行中断标志复位)原创 2022-11-15 16:26:31 · 620 阅读 · 0 评论 -
线程的状态
只有synchronized这样的代码——才会进入BLOCKED状态。因为synchronized是需要经过操作系统的调度的。原创 2022-11-15 12:01:14 · 218 阅读 · 0 评论 -
创建线程的5种方式
根据你CPU计算的能力(核数)来制定线程的数量。一台机器不可能只跑我们自己的程序,肯定还有其他的程序;得看实际中机器的情况。不可能让CPU的利用率达到100% , 出于安全的角度 , 只让其到80即可。只有一种——new Thread 出来 , 如果读过线程池/Future 的源码,就会知道最终都是 new 一个 Thread出来。基本上你把它部署上去,进行统计才能确定。——一般来说通过工具测算。本质都是——new一个Thread对象 , 并调用它的start方法。原创 2022-11-15 07:55:37 · 160 阅读 · 0 评论