摘要:在高并发环境下如何安全的发布对象实例。
本文分享自华为云社区《【高并发】如何安全的发布对象(含各种单例代码分析)》,作者:冰 河。
今天,为大家带来一篇有技术含量的文章,那就是在高并发环境下如何安全的发布对象实例。
发布对象:使一个对象能够被当前范围之外的代码所使用
对象溢出:是一种错误的发布,当一个对象还没有构造完成时,就使它被其他线程所见
不安全的发布示例代码:
package io.binghe.concurrency.example.publish;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
@Slf4j
public class UnsafePublish {
private String[] states = {"a", "b", "c"};
public String[] getStates(){
return states;
}
public static void main(String[] args){
UnsafePublish unsafePublish = new UnsafePublish();
log.info("{}", Arrays.toString(unsafePublish.getStates()));
unsafePublish.getStates()[0] = "d";
log.info("{}", Arrays.toString(unsafePublish.getStates()));
}
}