添加了用lock的功能来实现