线程带来的风险
- 安全性问题 ----> 安全性的含义是“永远不发生糟糕的事” 线程安全问题很是复杂,在没有充分同步的状况下,多个线程中的操做顺序是没法预测的。 若是没有同步,那么不管是编译器、硬件仍是运行时,均可以随意安排操做的执行顺序和时间,例如对寄存器或者处理器中的变量进行缓存(缓存后成为当前线程的局部变量),而这些被缓存的变量对于其余线程来讲是暂时(甚至永久)不可见的。
- 活跃性问题 ----> 活跃性的含义是“正确地事最终会发生” 多线程环境中活跃性问题的常见形式:死锁、活锁、饥饿
- 性能问题 性能问题与活跃性密切相关,活跃性意味着某件正确地事最终会发生,性能问题则关注让其尽快发生。性能问题包含多个方面,例如服务时间过长、响应不灵敏,吞吐率太低等。
Java中使用锁来实现同步、原子操做等功能,但锁的使用会带来性能方面的问题。当执行时间较长的计算或者可能没法快速完成的操做时(例如网络IO、控制台IO),必定不要持有锁。缓存