说说你对线程安全的理解
如何解决线程安全问题?有几种方法
- synchronized的同步方法 和 同步代码块
- lock锁
Thread、Runnable的区别
拓展创建多线程的方法
上面肯定卖出10张,因为new了两个 MyThread 而ticket是类的成员变量,所以一个线程卖5个咯
实现多线程的方法有哪些
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(比Runnable强大,可以又返回值,可以抛异常,支持范型)
- 使用线程池ExecutorService(常用参数 核心池大小、最大线程数、超时时间….)
synchronized与Lock的对比
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
说说你对守护线程的理解
弟们 Daemon
使用java的线程池
ThreadLocal的原理和使用场景 待理解
ThreadLocal的主要作用是提供线程的局部变量,访问某个ThreadLocal变量的每个线程都有自己的局部变量,它独立于变量的初始化副本。实际上是Thread类里面维护一个ThreadLocalMap,ThreadLocalMap以该ThreadLocal对象变量为key,去取对应的value的实现过程,达到某个ThreadLocal变量的每个线程都有自己的局部值(每一线程维护变量的副本),线程间独立变化独立维护,下面会分析源码来详细介绍ThreadLocal的实现原理。
ThreadLocal内存泄漏原因,如何避免 带复习
并行、并发、串行
并发的三大特性
- 原子性
不能在中间暂停然后再调度,要么都执行完,要么都不执行,整个事件是一个最小单位。
- 可见性
当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他的线程狗立刻看得到修改的值
可见性就是使用计算机的两个协议:总线Lock和MESI
- 有序性