java同步设计考虑是每个研发人员头疼的问题,往往不知如何判断同步代码块的合理大小,要做到这点,必须需要在各种设计需求之间进行权衡,包括安全性(这个需求必需满足)、简单性和性能。有时候,在简单性与性能之间会发生冲突,一定不要盲目地为了性能而牺牲简单性(这可能会破坏安全性)。
当使用锁时,你应该清楚代码块中实现的功能,以及在执行该代码块时是否需要很长的时间。无论是执行计算密集的操作,还是在执行某个可能阻塞的操作,如果持有锁的时间过长,那么都会带来性能的问题。
当执行时间较长的计算或者可能无法快速完成的操作时(例如:网络IO或者控制台IO),一定不要持有锁。