随笔分类 -  JUC并发编程

摘要:1、什么悲观锁? 顾名思义,悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身锁的机制都是 阅读全文
posted @ 2022-04-01 21:16 飞翔的小鸟er 阅读(260) 评论(0) 推荐(0) 编辑
摘要:synchronized关键字会让没获得锁资源的线程进入BLOCKED(阻塞)状态,只有在争夺到锁资源的时候才转换成RUNNABLE(运行)状态。这其中涉及到操作系统中用户模式和内核模式之间的切换,代价比较高。 同时,尽管jdk对synchronized关键字进行了优化,增加了从偏向锁到轻量级锁再到 阅读全文
posted @ 2022-04-01 21:06 飞翔的小鸟er 阅读(150) 评论(0) 推荐(0) 编辑
摘要:synchronized版本是同一个锁,lock版本是两个不同的锁 这里说错了,这就是一把锁,锁的就是ReentrantLock这个对象,ReenTrantLock中有AQS,AQS可以判断两次lock方法都是同一个线程,这才是可重入锁 synchronized和lock的区别 可以注意一下,老师这 阅读全文
posted @ 2022-04-01 16:14 飞翔的小鸟er 阅读(77) 评论(0) 推荐(0) 编辑
摘要:乐观锁是一种思想,就是数据更新的时候检测是否产生并发冲突。CAS是具体的实现 乐观锁的实现方式: CAS和版本号机制 乐观锁是一种锁类型,cas是乐观锁的一种具体实现方式 2. 由于new的时候声明泛型肯定是装箱类,这个时候传入值类型将会自动装箱 4. 总结:最好不使用原子类型,使用原子类型得保证比 阅读全文
posted @ 2022-04-01 11:35 飞翔的小鸟er 阅读(38) 评论(0) 推荐(0) 编辑
摘要:加个延时更容易看出问题 单反射+单例 三重检测 双反射 四重检测 变量加密 变量破坏 道高一尺魔高一丈 继续破解枚举模式 反射不能破坏枚举的单例 工作就写饿汉式 准没错 阅读全文
posted @ 2022-04-01 10:15 飞翔的小鸟er 阅读(74) 评论(0) 推荐(0) 编辑
摘要:1、这不是指令重排,是线程调度问题,指令重排是这样的: 8、之后只要线程2的 y=a 在线程1的a=1操作前执行完就行 3、之后创建两个线程进行操作:左边为线程1,右边为线程2 内存屏障在单例模式使用频率最高 阅读全文
posted @ 2022-04-01 09:52 飞翔的小鸟er 阅读(332) 评论(0) 推荐(0) 编辑
摘要:Java内存模型 保证在多线程环境下变量的相互可见性与有序性,不保证原子性 保证可见性:当某个线程修改volatile变量时,JMM会强制将这个修改更新到主内存中,并且让其他线程工作内存中存储的副本失效。 确实store在前,write在后 store与write反了,先store后write st 阅读全文
posted @ 2022-04-01 09:43 飞翔的小鸟er 阅读(144) 评论(0) 推荐(0) 编辑
摘要:先带你们过一遍多线程,具体高级应用要自己摸索 小写是类型,大写肯定是对象 阅读全文
posted @ 2022-03-31 16:18 飞翔的小鸟er 阅读(17) 评论(0) 推荐(0) 编辑
摘要:分治算法 cpu切换线程会消耗时间的,实际上这种效率最高的应该是分的任务数等于cpu的核数,如果我没记错的话。任务分的多,线程也就多了,线程太多的话,cpu上下文切换的损耗会很大。如果单核,那么这个东西没意义 设计Stream的人是神吗? 并行流底层还是forkjoin 第一个快证明你们电脑是单核的 阅读全文
posted @ 2022-03-31 16:08 飞翔的小鸟er 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-03-31 15:46 飞翔的小鸟er 阅读(23) 评论(0) 推荐(0) 编辑
摘要:函数式接口 断定型接口 消费型接口 供给型接口 阅读全文
posted @ 2022-03-31 15:32 飞翔的小鸟er 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-03-31 09:52 飞翔的小鸟er 阅读(30) 评论(0) 推荐(0) 编辑
摘要:First In First Out 同步队列 阅读全文
posted @ 2022-03-31 09:25 飞翔的小鸟er 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2022-03-31 08:56 飞翔的小鸟er 阅读(21) 评论(0) 推荐(0) 编辑
摘要:CountDownLatch 看源码了,还是个减法计数器 阅读全文
posted @ 2022-03-31 08:38 飞翔的小鸟er 阅读(28) 评论(0) 推荐(0) 编辑
摘要:.. 传统方式 进阶方式 阅读全文
posted @ 2022-03-30 22:12 飞翔的小鸟er 阅读(17) 评论(0) 推荐(0) 编辑
摘要:list synchronize效率低,lock效率高。 set hashmap原理 阅读全文
posted @ 2022-03-30 11:31 飞翔的小鸟er 阅读(33) 评论(0) 推荐(0) 编辑
摘要:不一定,发短信有延时,cpu是根据时间片段来调用线程的,执行哪个线程依靠的是cpu而不是代码顺序 八锁问题。一共8种。。推荐看视频理解更透彻。https://www.bilibili.com/video/BV1B7411L7tE?p=10 阅读全文
posted @ 2022-03-30 10:33 飞翔的小鸟er 阅读(31) 评论(0) 推荐(0) 编辑
摘要:亲测,用synchronized和wait,notify加标志位也是实现的顺序执行,这是标志位的作用控制的,跟condition没关系 确实可以只用一个Condition因为这里while条件已经限制了顺序 能发挥多核cpu优势 当生产线中不同环节需要不同数量的线程数执行,就有用了,自己品。扩展思维 阅读全文
posted @ 2022-03-30 10:10 飞翔的小鸟er 阅读(24) 评论(0) 推荐(0) 编辑
摘要:传统方式:synchronize,锁class,锁对象 根本就是因为if只判断了一次,就等待了,不会继续等待,而while就继续判断,不会同时唤醒的,而导致其中一个正常,另一个继续也执行,导致虚假唤醒 就是用if判断的话,唤醒后线程会从wait之后的代码开始运行,但是不会重新判断if条件,直接继续运 阅读全文
posted @ 2022-03-30 09:04 飞翔的小鸟er 阅读(190) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示