Java并发(二)—— 并发编程的挑战 与 并发机制的底层原理

时间:2022-07-28 07:28:10

单核处理器也可以支持多线程,因为CPU是通过时间片分配算法来循环执行任务

多线程一定比单线程快么?不一定,因为线程创建和上下文切换都需要开销。

如何减少上下文切换

  • 无锁并发编程
  • CAS算法
  • 使用最少线程
  • 协程

什么是死锁

两个线程互相占用资源,使得资源无法被释放,任务无法被终止

如何避免死锁

  • 避免一个线程同时获取多个锁
  • 避免一个线程在锁内同时占用多个资源
  • 尝试使用定时锁
  • 数据库锁,加锁和解锁必须在同一个数据库连接里

volidate

增加volidate的作用是,是共享变量在多线程的条件下可见。

原理是,增加volidate修饰的变量,在修改时,会从缓存中写入到内存,进而导致其他线程缓存中的该变量值失效,重新从内存中获取。

synchronized

4种锁的形式:无锁、偏向锁、轻量级锁、重量级锁

引入偏向锁的原因是,多数情况下,一个对象会被同一个线程多次获取。