多线程
文章平均质量分 72
罗隽_jerChuan
自己还有很多不足,希望能够成为大牛
展开
-
深入理解CAS
什么是CAS CompareAndSet 比较交换 :比较当前内存和主内存中的值,如果达到预期,就进行交换,如果没有达到,就一直循环。 缺点:1.由于底层是自旋锁,循环较为耗时 2.一次只能保证一个共享变量的原子性 3.存在ABA问题 在Java的原子类中存在CAS方法,其方法底层则是调用Unsafe类中的CAS方法。 什么是Unsafe类:它是Java用来修改内存中变量的一个后门类,其底层都是C++对于内存变量的直接修改方法。 以AtomicInteger的加法为例,可以看到它的底层就.原创 2021-02-27 22:32:49 · 184 阅读 · 0 评论 -
了解volatile
当我们聊到volatile的时候,只需要围绕它的三个特性来了解即可 1.保证可见性 2.不保证原子性 3.禁止指令重排 那么我们则需要细化这三个特性的内容 1.volatile是如何保证可见性的呢? 在java中还有一个约定的概念JMM(java内存模型)我们在建立线程的同时,线程将会分为主内存+工作内存 而我们在进行一些共享内存变量(比如静态变量)的一些操作的时候 JMM则有一些同步约定:1.线程解锁前,共享变量必须刷新到主内存中 2.线程加锁前,必须将主内存的共享变量读取到工作内存中 3.原创 2021-02-27 13:42:17 · 163 阅读 · 0 评论 -
一道面试题:通过wait和notify的两个线程交互输出thread1-1...thread1-5,thread2-6...thread2-10...
这是一道关于多线程的面试题,好久没有做过这种多线程的题了,手有点生,那么就来敲一敲package threadDemo;/* * 多线程的交叉打印 */ public class threaddemo1 { public static void main(String[] args) { num num = new num(); Thread t1 = n原创 2017-10-21 23:32:03 · 813 阅读 · 1 评论