01 并发编程的挑战
为什么要并发编程?¶
让程序运行的更快!
线程多程序不一定快
多线程的问题:
- 上下文切换
- 死锁
- 软硬件资源的限制
如何减少上下文切换
无锁并发编程、CAS 算法、使用最小的线程、使用协程
- 无锁并发编程。竞争锁的时候,会引起上下文切换。可以尽量少用锁
- CAS 算法
- 尽量不去创建新的线程,使用现用的线程解决问题
- 协程。在单线程中实现任务的调度
死锁避免¶
- 避免一个线程同时获得多个锁
- 尽量保证一个锁只占用一个资源
- 尝试使用定时锁
- 数据库的锁,加解锁必须在一个数据库连接中
资源问题¶
没那么多资源,非要搞并发,说不来还比串行的慢
建议¶
多用 JDK 并发包提供的并发容器和工具类解决并发问题