• 三种创建线程方式
    • callable区别: 不仅可以运行线程,还可以返回结果
    • synchronized: 有很多种情况
    • 锁的本质:在对象头里面有Mark Word 会存储状态
    • 锁升级?什么是轻量级锁
    • wait-notify
    • wait和notify为什么必须和synchronized一起使用
      • 因为wait和notify是独占锁,所以必须使用
    • 为什么wait时候必须释放锁
      • 防止死锁
    • Interrupted
      • 可以中断线程
      • 只有声明了会抛出InterrupedException的函数才会抛出异常
      • 捕获后就可以清楚状态
    • 能够被中断的,叫做轻量级锁
    • LockSupport.park()
    • 如何优雅的关闭线程
      • 不建议使用stop、destroy(); 资源无法释放,不保证finally里释放
      • 循环时候给个信号
    • 守护线程: 非守护线程才关系到程序的停止
    • 并行和并发:
      • 并行:多核上同时运行
      • 并发:通过程序并发的运行
    • 同步:
      • 控制同步
      • 数据访问同步
    • 临界段
      • 多线程的情况下,保护起来一段代码
    • 死锁
      • 四个条件
    • 活锁
      • 举例: 骑自行车
    • 内存可见性
      • 本地内存和共享内存
    • 重排序
      • 编译器重排序
      • CPU指令重排序
      • CPU内存重排序
    • 内存屏障
      • 两个LoadLoad之间不允许重排序
    • 单线程重排序
      • 如果没有前后依赖,那么可能会重排序
    • 多线程重排序
      • 只能保证单个线程是不重排序
    • happen-before
      • 单线程中
      • volatile
      • synchronized的解锁、加锁
    • JUC里并发容器
    • ArrayBlockingQueue
      • 成环数组
      • 一个锁、一个条件
    • LinkedBlockingQueue
      • 单向链表
      • 两个锁、两个条件
    • PriorityBlockingQueue
      • 需要compaable
      • 二叉小根堆
    • BlockingDeque
      • 阻塞的双端队列
      • 只用LinkedBlockingDeque
      • 一把锁,两个条件
    • 同步工具类
    • Semaphore
      • 信号量,控制最多同时多少个
      • 大学生抢座
      • acquire()、release()
    • CountDownLatch
      • 主线程等待
      • 底层AQS、通过queue方式去等待
      • 用到了公平锁和非公平搜
    • CyclicBarrier
      • 分阶段
      • 集体笔试、集体面试
    • Exchanger
      • 交换数据、阻塞
    • phaser
      • 可以替代那两个
    • 原子类
      • 主要用到CAS操作
      • 用的自旋策略
    • 自旋与阻塞
      • 两种策略
    • 轻量级锁:可以唤醒
    • Lock和Condition
    • 互斥锁、可重入锁
    • image.png

    并发度主键增高

    • 线程池
      • Executors工具类
      • ScheduledThreadPoolExecutor
      • CompletableFuter
    • ForkJoinPool
      • 类似于MapReduce
      • 将一个大的任务等待执行
    • 阻塞-入栈;唤醒-出栈
    • 子任务可以执行完了,自动去找活干,可以保证负载均衡
    • 设计模式
      • 单线程设计模式: 保证临界区
      • Immutable模式:不变的,不可发生改变
      • Guarded Suspension模式
        • 比较常用
        • 用法:while里面进行判断
      • Balking
        • 类似Guarded
        • 不同于while,如果if发现保存过了,就推出了
      • 读写锁模式 Read-Write Lock
        • while里面判断的东西多一些,同时判断读和写
      • Thread-Per-Message
        • 类似于Tomcat,每个请求一个县城
      • Worker Thtread
        • 类似于Executor,有的话就干活,没有就等待
      • Future模式
        • 可以调到回调函数,等完事后才能返回结果
        • 用在Callable上
    • CountDownLatch
      • 可以最后关闭资源
    • Java内存模型
      • 截图六点
      • 写上标题就好