美文网首页
2021-02-23-

2021-02-23-

作者: 你家门口的两朵云 | 来源:发表于2021-02-23 09:29 被阅读0次
    7、ThreadLocal 是什么?底层⼯作原理是什么?能模拟写⼀个例⼦么?

    什么是ThreadLocal?
    ThreadLocal称为线程本地变量,其为变量在每个线程中都创建了一个副本,每个线程都访问和修改本线程中变量的副本。

    ThreadLocal是java.lang包中的一个类,用来实现变量的线程封闭性,即只有当前线程可以操作该变量,通过把一个变量存在当前线程的一个Map容器中来实现。


    原理
    Threadlocal 的属性包括 threadLocalHashCode,getMap(Thread t) 到当前线程去获取一个 ThreadLocalMap 的内部类对象,它的属性有一个 entry 数组,数组下标是当前 Threadlocal 对应的hash值,entry 对象是一个 WeakReference 对象,存放对应 Threadlocal 需要保存的变量值 value。

    ThreadLocal 用于提供线程局部变量,通过它的 get() 和 set() 方法访问某个变量相应线程自己的局部变量。但在这里需要注意的是,它是通过各个线程自己创建对象然后调用这里的set方法设置进去,而不是由 ThreadLocal 自己来创建变量的副本的。


    8,volatile 的⼯作原理?

    有volatile修饰的共享变量进行写操作的时候会多出Lock前缀的指令,该指令在多核处理器下会引发两件事情。

    1,将当前处理器缓存行数据刷写到系统主内存。

    2,这个刷写回主内存的操作会使其他CPU缓存的该共享变量内存地址的数据无效。

    这样就保证了多个处理器的缓存是一致的,对应的处理器发现自己缓存行对应的内存地址被修改,就会将当前处理器缓存行设置无效状态,当处理器对这个数据进行修改操作的时候会重新从主内存中把数据读取到缓存里。


    9,cas 知道吗?如何实现的?

    CAS(Compare and Swap),即比较并替换,实现并发算法时常用到的一种技术。

    算法主要是包含读写值,期望值,更新值,当期望值与主内存读到的值相等时,才会通过原子方式更新主内存值,否则就表示已有其它线程更新过主内存的值,这时当前线程CAS指令继续循环读取值 做比较 直到相等为止,才更新成功,结束指令。

    CAS底层主要实现类为UnSafe类,为jdk自带源码,调用UnSafe中的方法,实现CAS汇编指令,指令完全依赖硬件,执行过程不会打断,保证原子性。

    相关文章

      网友评论

          本文标题:2021-02-23-

          本文链接:https://www.haomeiwen.com/subject/nezlfltx.html