1、上下文切换
含义:CPU通过给每个线程分配CPU时间片实现多线程执行代码,当前任务执行一个时间片后会切换下一个任务,但切换前会保存上一个任务的状态,从保存到加载的过程就是一次上下文切换。
但线程会有创建和上下文切换的开销,所以多线程不一定快。
减少上下文切换方法:
①无锁并发编程:如ID按Hash算法取模,不同线程处理不同段数据
②CAS算法:Atomic包
③使用最少线程
④协程
2、死锁
线程1和线程2互相等待对方释放锁
避免死锁方法:
①避免同一个线程获得多个锁
②避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
③尝试使用定时锁。使用lock.tryLock代替内部锁机制
④数据库锁,加锁解锁必须在同一数据库连接里,否则会出现解锁失败情况
3、资源限制
解决:
硬件问题:集群
软件问题:资源池复用资源
根据不同的资源限制调整程序并发度