锁与二次检查未重新获取值,造成多线程下program被多次初始化
修改key的锁方式,并且在锁内重新获取program再做二次检查