- 线程安全问题(Thread Safe)
- 线程的生命周期(Thread Life Cycle)
- 上下文切换(Context Switch)
- 可靠性(Reliability)
1.线程安全问题
当多个线程共享数据时,如果处理不当,可能导致数据不一致问题,如脏读、丢失数据更新等。
2. 线程生命周期
一个线程从创建到运行结束会经历多个状态。RUNNABLE是我们最期望线程拥有的状态。实际上,如果编码不当容易导致死锁(DeadLock)。例如:线程T1持有锁L1,试图持有L2,线程T2持有L2又试图获得锁T1,这就会产生T1和T2一直处于等待对方释放锁而又无法获得锁的问题。当然一直处于忙碌的线程也可能产生活锁(Live lock)的问题,如一个线程一直尝试某个操作,条件一直无法满足,该线程一直尝试并不会阻塞,活锁是一种特殊饥饿状态,会会耗费CPU资源。线程饥饿,某种情况可能导致某些线程永远无法获取CPU执行的机会而永远处于RUANNABLE状态的READY子状态。
3. 上下文切换
由于CPU资源稀缺性,线程上下文切换是多线程编程的必然副产物,增加了系统的消耗,不利于系统的吞吐率。
4. 可靠性
线程作为进程的组件,如果进程意外终止,进程内的所有线程也会随之无法运行。