单核处理器也可以支持多线程,因为CPU是通过时间片分配算法来循环执行任务
多线程一定比单线程快么?不一定,因为线程创建和上下文切换都需要开销。
如何减少上下文切换
- 无锁并发编程
- CAS算法
- 使用最少线程
- 协程
什么是死锁
两个线程互相占用资源,使得资源无法被释放,任务无法被终止
如何避免死锁
- 避免一个线程同时获取多个锁
- 避免一个线程在锁内同时占用多个资源
- 尝试使用定时锁
- 数据库锁,加锁和解锁必须在同一个数据库连接里
volidate
增加volidate的作用是,是共享变量在多线程的条件下可见。
原理是,增加volidate修饰的变量,在修改时,会从缓存中写入到内存,进而导致其他线程缓存中的该变量值失效,重新从内存中获取。
synchronized
4种锁的形式:无锁、偏向锁、轻量级锁、重量级锁
引入偏向锁的原因是,多数情况下,一个对象会被同一个线程多次获取。