双重检查锁问题如何有效避免在多线程编程中?