![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
多线程
大步往前走
这个作者很懒,什么都没留下…
展开
-
2,volatile的解析
内容提要 • volatile能避免指令重排 • volatile不能保证原子性 • volatile的使用场景:让变量在线程间都可见 • 使用场景:ConcurrentHashMap 不能保证原子性 • 用volatile修饰一个int型变量,初始值是0 • 起1000个线程,每个线程对其加1,结果小于1000能避免指令重排 • 在编译和执行代码时,出于优化考虑,会重排指令 • 大多数场景下不会影响结果,但在多线程环境下可能会有问题 • volatile能阻止指令重排volatile能保证.原创 2020-05-12 13:37:40 · 123 阅读 · 0 评论 -
8,用ConcurrentHashmap综合展示并发、集合和读源码的能力
内容提要 • 如何引出该话题 • 通过put和get源码,了解ConcurrentHashMap的底层结构 和hash流程; • 以CAS+ Synchronized管理并发的方式; • 对比jdk1.7和1.8的差别,介绍ConcurrentHashMap; • 以实例介绍volatile的含义; 引出话题 • 谈到HashMap和线程不安全对象时可以引出; • 为什么要引出该话题?包含值钱要素太多; • 回答数据结构hash表、红黑树等相关问题时可以引出; • 谈到并发和vola..原创 2020-05-12 13:39:13 · 183 阅读 · 0 评论 -
6,线程池
内容提要 • 线程池的基本用法; • 构造线程池时各项参数解析 • 线程池的工作方式 • 设置成有界队列,避免内存泄漏 • 排查因线程池而导致的OOM异常的说辞 面试相关问题 • 构造线程池时,你会关注哪些参数? • 为什么要用线程池?避免因线程切换而造成的性能损耗 • 线程池是如何接受并处理任务的?任务满了以后怎么办? • 在使用线程池时,如何避免OOM异常?基本用法 • 创建ThreadPoolExecutor,注意参数 • 定义Runnable或Callable类型的任务 • 把.原创 2020-05-12 13:38:34 · 129 阅读 · 0 评论 -
7,你用过那些并发类
内容提要 • 通过wait,nofity管理并发 • 通过Condition实现线程间的通讯 • 通过Semaphore管理多线程的竞争以生产者消费者问题观察wait和notify • 一旦执行wait方法,会释放synchronized所关联的锁,进 入阻塞状态,无法再次主动地到可执行状态 • 这两个方法需要放置在synchronized的作用域里 • notifyAll会唤醒因wait而进入到阻塞状态的线程,但它们 没得到锁,因此会竞争锁,得到锁的继续执行,在它释放 锁后,其它线程会继续竞争,以原创 2020-05-12 13:39:01 · 240 阅读 · 0 评论 -
5.ThreadLocal
内容提要 • ThreadLocal能定义线程本地变量; • 从ThreadLocalMap进一步了解ThreadLocal特性; • 结合底层代码,深入了解ThreadLocal; • ThreadLocal可能会导致内存泄漏,如何避免? • 总结:面试时通过底层代码,全面展示ThreadLocal的方式; 通过ThreadLocal,定义线程本地变量 • 也能通过ThreadLocal存储线程本地变量 ; • 线程里可以使用定义在主内存里的变量 ; • 用多个线程去爬取不同的网站,每个线程原创 2020-05-12 13:38:19 · 111 阅读 · 0 评论 -
4,锁
内容提要 • 用ReentrantLock控制业务层面的并发; • 进一步理解可重入特性; • 公平锁和非公平锁的使用场景; • 读写锁的使用场景; • 在面试中介绍锁的相关说辞; ReentrantLock控制业务层面的并发 • 在账户类里,加入ReentrantLock锁 ; • 登录,登出,存钱和取钱等方法上,无需加synchronized关键字; ReentrantLock控制业务层面的并发 • 登录操作前,先锁账户,登出后,释放锁 • acc是AccountWithLock的实例原创 2020-05-12 13:38:05 · 96 阅读 · 0 评论 -
3,介绍synchronized关键字
内容提要 • synchronized作用在代码块、方法和静态方法上的效果 • synchronized具有可重入特性 • 能锁单个方法,但不能锁由多个方法组成的业务流程 • 面试相关说辞以及如何找机会说出 synchronized修饰代码块 • 修饰以{}包含的代码块,多个并发线程到达时,只有一个 线程能执行,其它线程被阻塞 • synchronized作用的对象(锁定的对象)是调用这个代码块的 实例对象 • synchronized是同步锁 synchronized修饰方法 • sync...原创 2020-05-12 13:37:54 · 113 阅读 · 0 评论 -
1.线程安全知识点
本章目标 1. 能通过线程内存模型,展示线程安全方面的技能 2. 能在面试中说出Synchronized和各种锁的使用要点 3. 能在面试中综合展示各种线程同步和并发技能 4. 能通过讲述ConcurrentHashMap对象的底层代码,综合展示锁 、volatile、并发控制和集合方面的技能内容提要 • 结合案例,了解线程安全的表现 • 了解线程不安全和线程安全的集合对象 • 从线程的内存模型入手,了解因抢占而导致的线程并发问题 • 如何在面试中全面展示线程安全的相关技能线程安全和线程不安全的...原创 2020-05-11 16:30:25 · 215 阅读 · 0 评论