说说你对线程安全的理解

image.png

如何解决线程安全问题?有几种方法

  • synchronized的同步方法 和 同步代码块
  • lock锁

Thread、Runnable的区别

拓展创建多线程的方法
image.png
上面肯定卖出10张,因为new了两个 MyThread 而ticket是类的成员变量,所以一个线程卖5个咯
image.png
image.png

实现多线程的方法有哪些

  • 继承Thread类
  • 实现Runnable接口
  • 实现Callable接口(比Runnable强大,可以又返回值,可以抛异常,支持范型)
  • 使用线程池ExecutorService(常用参数 核心池大小、最大线程数、超时时间….)

synchronized与Lock的对比

image.png
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。

说说你对守护线程的理解

image.png弟们 Daemon
image.png
使用java的线程池

ThreadLocal的原理和使用场景 待理解

ThreadLocal的主要作用是提供线程的局部变量,访问某个ThreadLocal变量的每个线程都有自己的局部变量,它独立于变量的初始化副本。实际上是Thread类里面维护一个ThreadLocalMap,ThreadLocalMap以该ThreadLocal对象变量为key,去取对应的value的实现过程,达到某个ThreadLocal变量的每个线程都有自己的局部值(每一线程维护变量的副本),线程间独立变化独立维护,下面会分析源码来详细介绍ThreadLocal的实现原理。
image.png
image.png
image.png

ThreadLocal内存泄漏原因,如何避免 带复习

image.png
image.png
image.png

并行、并发、串行

image.png
image.png

并发的三大特性

  • 原子性

不能在中间暂停然后再调度,要么都执行完,要么都不执行,整个事件是一个最小单位。
image.png
image.png

  • 可见性

当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他的线程狗立刻看得到修改的值
可见性就是使用计算机的两个协议:总线Lock和MESI
image.png

  • 有序性

image.png
image.png

为什么使用线程池?解释参数

image.png

简述线程池处理流程

image.png

线程池中阻塞队列的作用?为什么是先添加队列而不是先创建最大线程

image.png

简述volatile

image.png