线程的基本使用

2021-08-22  本文已影响0人  Dalvik_

1.synchronized之错误的加锁和原因分析

2.ThreadLocal辨析

ThreadLocal 为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享

ThreadLocal辨析

每个线程独有的 ThreadLocalMap 然后再用 ThreadLocal 的当前实例,拿到 Map 中的相应的 Entry,然后就可 以拿到相应的值返回出去。当然,如果 Map 为空,还会先进行map 的创建,初始化等工作。

ThreadLocal 内存泄漏的根源是:由于 ThreadLocalMap 的生命周期跟 Thread 一样长,如果没有手动删除对应 key 就会导致内存泄漏,而不是因为弱引 用。总结 JVM 利用设置 ThreadLocalMap 的 Key 为弱引用,来避免内存泄露。 JVM 利用调用 remove、get、set 方法的时候,回收弱引用。 当 ThreadLocal 存储很多 Key 为 null 的 Entry 的时候,而不再去调用 remove、 get、set 方法,那么将导致内存泄漏。 使用线程池+ ThreadLocal 时要小心,因为这种情况下,线程是一直在不断的 重复运行的,从而也就造成了 value 可能造成累积的情况。

3.线程之间的协作

4.线程的并发工具类

6.线程的状态

线程的状态

产生条件:
1.多个操作者争夺多个资源
2.争夺资源的顺序不对
3.拿到资源不放手
学术说法:
1.互斥条件
2.请求和保持
3.不剥夺
4.环路等待

7.CAS(Compare And Swap)

synchronized  悲观锁 
CAS 乐观锁
上一篇 下一篇

猜你喜欢

热点阅读