并发编程的目的是为了让程序运行的更快。
1.1上下文切换
CPU通过时间片分配算法来循环执行任务的,当前任务执行一个时间片后就会切换到下一个任务。
任务从保存到字啊加载的过程是一次上下文切换。
1.1.1多线程一定快吗?
多线程不一定快,因为线程有创建和上下文切换的开销。
1.1.2如何减少上下文的切换
减少上下文的切换方法有无所并发编程、CAS算法、使用最少线程和使用协程。
无锁并发编程:减少锁的竞争,使用一些方法避免使用锁,比如数据划分范围处理。
CAS算法:Java的Atomic包使用CAS算法更新数据,无需加锁。
使用最小线程:避免不需要的线程。
协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
1.2死锁
避免死锁的几个常见方法。
避免一个线程同时获取多个锁。
避免一个线程在锁内同时中庸多个线程,尽量保证每个锁只占用一个资源。
尝试使用定时锁,使用lock.tryLock(timeout)来使用内部锁机制;
对于数据库锁,加锁和解锁必须在一个数据库连接里。