随笔分类 -  JUC

摘要:volatile volatile作用: 可见性 -》lock-> 缓存一致性协议【MESI】 有序性-》防止指令重排 如何实现的? 在JMM内存模型中: 两个线程所占的寄存器中都有一个i值,都是从主存中读到并拷贝到各自的缓存,并最终到达寄存器中。 先看一下不使用volatile会有什么后果: 当核 阅读全文
posted @ 2021-04-12 14:38 Java民工陆小凤 阅读(197) 评论(0) 推荐(0) 编辑
摘要:在java程序运行的时候,编译器并不一定会根据java程序的顺序去执行,可能会依据优化策略对程序进行重排序,这就是指令重排,主要是提高了程序执行的并行度。 但是在做指令重排的前提下,不能违背程序原本的语义,即本来执行结果为10,不能因为指令重排了,结果变成了8,这就是严重的Bug了。 来看一下jvm 阅读全文
posted @ 2021-03-02 15:00 Java民工陆小凤 阅读(187) 评论(0) 推荐(0) 编辑
摘要:这里的单例模式实现方法都是线程安全的 一般常见的都是两种单例单例实现方法。加了两种,列举如下 饿汉式 双重检查加锁饿汉式 内部类方式 枚举单例 下面给出JAVA代码实例 /** * 懒汉式 */ public class Singleton1 { private Singleton1(){} pri 阅读全文
posted @ 2020-09-21 21:15 Java民工陆小凤 阅读(271) 评论(0) 推荐(0) 编辑
摘要:1、请描述synchronized和reentrantlock的底层实现及重入的底层原理 2、请描述锁的四种状态和升级过程 3、CAS的ABA问题如何解决 4、请谈一下AQS:为什么AQS的底层是CAS+volidate 5、请谈一下你对volidate的理解 6、volidate的可见性和静止指令 阅读全文
posted @ 2020-09-02 21:07 Java民工陆小凤 阅读(321) 评论(0) 推荐(0) 编辑
摘要:问:多线程之间通信方法有哪些? 》wait(),notify(),notifyAll()。 问:以上三个方法的使用场景、使用方法与注意事项有哪些? 》 * 多个线程通信 * wait(),notify(),notifyAll() * * wait(),当前线程立即进入阻塞状态,并释放同步监视器 * 阅读全文
posted @ 2020-08-31 21:06 Java民工陆小凤 阅读(104) 评论(0) 推荐(0) 编辑
摘要:问:如何使用Lock锁方式解决线程安全问题?能给出具体实现代码吗? 》 import java.util.concurrent.locks.ReentrantLock; /** * 解决线程安全问题-2 Lock锁 * * jdk5.0新增 */ class Window implements Ru 阅读全文
posted @ 2020-08-30 21:54 Java民工陆小凤 阅读(101) 评论(0) 推荐(0) 编辑
摘要:问1:java多线程场景下,为什么会出现线程安全问题? 》因为当多个线程操作同一个共享数据,且如果存在场景:多个线程同时操作共享数据。比如卖票会出现重票,错票(票号为负数) 问2:使用synchronized 代码块同步的这样方式,来实现线程安全,核心时有一个同步监视器(俗称锁)。锁可以为任何一个对 阅读全文
posted @ 2020-08-26 21:56 Java民工陆小凤 阅读(103) 评论(0) 推荐(0) 编辑
摘要:问1:同一个线程对象可以被多次调用start方法吗? 》不可以。因为每一个线程有一个volidate修饰的线程状态【threadStatus】。在每次调用start方法时,都会检查线程状态,如果不为0,则抛出 【IllegalThreadStateException();】 问2:主线程和子线程之间 阅读全文
posted @ 2020-08-25 19:34 Java民工陆小凤 阅读(140) 评论(0) 推荐(0) 编辑

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