1.上下文切换
创建线程和线程切换存在的开销。
减少上下文切换
①无锁并发编程
②CAS(Compare And Swap)算法,不需加锁
③最少使用线程
④协程:单线程中执行多任务
2.死锁
避免死锁
操作系统中的死锁预防、死锁避免和死锁检测
一锁一资源
定时锁(Java 5提供了更灵活的锁工具,可以显式地索取和释放锁。在索取锁的时候可以设定一个超时时间,如果超过这个时间还没索取到锁,则不会继续堵塞而是放弃此次任务。)
数据库锁(只能在一个数据库连接里加锁和解锁)
3.资源限制
资源限制的情况下,并发变成串行且比串行还要花费更多的开销。
解决资源限制的问题
①硬件资源,考虑使用集群并行执行程序,让程序在多机上运行
②软件资源,使用资源池对资源复用
③根据资源调整并发度
学习心得:并发并不是想并发就并发,并发编程时需要注意到很多问题,只有注意到这些问题,对如何正确并发编程会有帮助。