一、上下文切换
- 含义
CPU通过给每个线程分配时间片来实现多线程,时间片一般是几十毫秒。当任务时间片用光后会切到下一个任务,但是,在切换前会保存上一个任务的状态,以便切换回这个任务的时候可以再加载这个任务。任务从保存状态到再加载的过程就是一次上下文的切换。 - 如何减少上下文切换
(1)无锁并发编程。如将数据合理分段,不同线程处理不同不同段数据。
(2)CAS算法。Java的Atomic包使用CAS算法,就不需要锁。
(3)避免创建不需要的线程。
(4)协程。
二、死锁
避免死锁的常见方法:
(1)避免一个线程同时获取多个锁。
(2)避免一个线程在锁内同时占用多个资源。
(3)尝试使用定时锁,trylock等。
(4)对于数据库锁,加锁和解锁必须在一个数据库连接里。
三、其他
(1)thread.join()
等待thread执行完毕后,在继续执行当前线程。