多线程编程的优势与存在的风险
优势:
- 提高系统的吞吐率(Throughout)。多线程编程可以使一个进程有多个并发的操作。
- 提高响应性。Web服务器会采用一些专门的线程负责用户的请求,缩短了用户的等待事件。
- 充分利用多核处理器资源,通过多线程可以充分利用CPU资源。
问题与风险:
-
线程安全问题。多线程共享数据时,如果没有采取正确的并发访问控制措施,就可能会产生数据一致性问题,如读取脏数据(过期的数据),如丢失数据更新。
-
线程火星问题,由于程序自身的缺陷或者由资源稀缺性导致线程一直处于非 RUNNABLE 状态,这就是线程活性问题,常见的活性故障有以下几种:
死锁
锁死
活锁
饥饿 -
上下文切换。处理器从执行一个线程切换到执行另一个线程。
-
可靠性。可能会由一个线程导致 JVM 意外终止,其他的线程也无法执行。