对象构造要做到线程安全,唯一的要求是在构造期间不要泄漏 this 指针,即
- 不要在构造函数中注册任何回调;
- 也不要在构造函数中把 this 传给跨线程的对象;
- 即便在构造函数的最后一行也不行。
之所以这样规定,是因为在构造函数执行期间对象还没有完成初始化,如果 this 被泄漏(escape)给了其他对象(其自身创建的字对象除外),那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果。
取自:第一章 线程安全的对象生命期管理 之 对象的创建很简单
对象构造要做到线程安全,唯一的要求是在构造期间不要泄漏 this 指针,即
之所以这样规定,是因为在构造函数执行期间对象还没有完成初始化,如果 this 被泄漏(escape)给了其他对象(其自身创建的字对象除外),那么别的线程有可能访问这个半成品对象,这会造成难以预料的后果。
取自:第一章 线程安全的对象生命期管理 之 对象的创建很简单