并发专题【非常全面,建议收藏】

254 阅读2分钟

并发

基础

  • 1、什么是线程与进程?

  • 2、简述线程与进程的关系,区别以及优缺点?

    • 2.1、图解进程和线程的关系?
    • 2.2、程序计数器为什么是线程私有?
    • 2.3、虚拟机栈和本地方法栈为什么私有?
    • 2.4、堆和方法区的作用?
  • 3、并行和并发的区别?

  • 4、为什么使用多线程?

  • 5、使用多线程会带来什么问题?

  • 6、线程的生命周期和状态?

  • 7、什么是上下文切换?

  • 8、什么是线程死锁?如何避免?

  • 9、sleep() 和 wait()的异同?

  • 10、为什么启动 start() 调用 run(),不直接调用 run() 呢?

进阶

  • 1、sychronized关键字

    • 1.1、你对sychronized关键字的理解?
    • 1.2、有什么过sychronized吗?怎么使用的?
    • 1.3、sychronized的底层原理?
    • 1.4、在JDK1.6之后有哪些优化?
    • 1.5、sychnorized和ReentrantLock异同?
    • 1.6、sleep() 、join()、yield()有什么区别?
    • 1.7、Synchronized 和 Lock 区别?
    • 1.8、单例模式的双重检验锁
  • 2、volatile关键字

    • 2.1、你对volatile的理解?
    • 2.2、volatile和sychronized有什么区别?
    • 2.3、写一个使用 volatile 而可以不用 synchronize 的场景
  • 3、ThreadLocal

    • 3.1、ThreadLocal是什么?
    • 3.2、ThreadLocal示例?
    • 3.3、ThreadLocal原理?
    • 3.4、ThreadLocal内存泄漏问题?
  • 4、线程池

    • 4.1、线程池是什么?
    • 4.2、线程池的好处?
    • 4.3、线程池有哪些参数?作用是什么?
    • 4.4、线程有哪几种方式?
    • 4.5、Runnable()和Callable的区别?
    • 4.6、执行excute()和submit()的区别?
    • 4.7、线程池的几种创建方法?
    • 4.8、Executor框架
      • 4.8.1、什么是Executor
      • 4.8.2、Executor由哪三部分组成?(任务(Runable和Callable)、任务执行(Executor)、计算结果(Future))
    • 4.9、Executor框架使用示意图
    • 4.10、ThreadPoolExecutor介绍
      • 4.10.1、ThreadPoolExecitor分析
      • 4.10.1、推荐使用ThreadPoolExcutor创建线程池
    • 4.11、ThreadPoolExecutor使用示例
      • 4.11.1、Runnable + ThreadPoolExecutor
      • 4.11.2、Callable + ThreadPoolExecutor
      • 4.11.3、execute()和submit()的区别
      • 4.11.4、shutdown()与shutdowmNow()的区别
      • 4.11.5、isTerminated与isShutdown()的区别
  • 5、Atomic原子类

    • 5.1、什么是Atomic
    • 5.2、JUC的原子类中四个类?
    • 5.3、简单说一下AtomicInteger类的使用
    • 5.4、简单说一下AtomixInteger类的原理
  • 6、AQS

    • 6.1、什么是AQS?
    • 6.2、AQS的原理
      • 6.2.1、AQS原理概括
      • 6.2.2、AQS对资源的共享方式
      • 6.2.3、AQS底层使用的摸板组件
    • 6.3、AQS总结
  • 7、原理

    • 7.1、说说 CountDownLatch 原理
    • 7.2、说说 CyclicBarrier 原理
    • 7.3、说说 Semaphore 原理
    • 7.4、说说 Exchanger 原理
    • 7.5、说说 CountDownLatch 与 CyclicBarrier 区别
  • 8、阻塞队列的类别和区别?

  • 9、Lock

    • 9.1、Lock底层实现
    • 9.2、Lock的具体用法
  • 10、乐观锁与悲观锁

    • 10.1、什么是悲观锁
    • 10.2、什么是乐观锁
    • 10.3、两者有什么区别
    • 10.4、应用的场景
    • 10.5、乐观锁常见的两种实现机制
      • 10.5.1、版本号
      • 10.5.2、CAS算法
    • 10.6、使用CAS算法存在哪些缺点
      • 10.6.1、ABA问题
      • 10.6.2、循环时间开销大
      • 10.6.3、只能保证一个共享原子变量
    • 10.7、CAS与sychronized的区别
  • 11、JDK提供的并发容器

    • 11.1、有哪些?作用?
    • 11.2、concurrentHashMap
      • 11.2.1、concurrentHashMap与Hashable的区别
      • 11.2.2、concurrent与hashMap的区别
      • 11.2.3、concurrentHashMap的底层
    • 11.3、CopyAndWriterArrayList
      • 11.3.1、简介
      • 11.3.2、原理
      • 13.3.3、源码分析
    • 11.4、concurrentLinkedQueue
    • 11.5、BlockingQueue
      • 11.5.1、简述
      • 11.5.2、ArrayBlockingQueue
      • 11.5.3、LinkedBlockingQueue
      • PriorityBlocking
    • 11.6、concurrentListMap
  • 12、高并发极小任务,如何选择线程池?换成长短不一的任务呢?(自定义任务队列)

  • 13、多线程如何控制同步的