1、首先写一个通用单例模式
public class SingletonPattern() {
private static SingletonPattern singletonPattern = null;
//抑制不能产生一个实例
private SingletonPattern() {
}
public SingletonPattern getInstance() {
if(this.singletonPattern == null) {
this.singletonPattern = new SingletonPattern();
}
return this.singletonPattern;
}
}
有一个问题的是,如果有两个线程A和B,线程A执行到
this.singletonPattern = new SingletonPattern()
正在申请分配,在申请过程中B线程执行,由于此时
this.singletonPattern == true;
因此,又会实例化一个实例,这样就会导致逻辑上的混乱。
2、解决该问题的方式,如下:
private static final MockServerClient mockServerClient = new MockServerClient();
//限制住不能直接产生一个实例
private MockServerClient() {
JPanel jp1 = createNetworkPanel();
JPanel jp2 = createSetPanel();
jp1.setBorder(BorderFactory.createTitledBorder("配置信息"));
jp2.setBorder(BorderFactory.createTitledBorder("数据显示"));
frame.setLayout(new BorderLayout());
frame.setSize(800, 600);
frame.setLocation(600, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(jp1, BorderLayout.WEST);//西(左)
frame.add(jp2, BorderLayout.EAST);//东(右)
frame.setResizable(false);
frame.setVisible(true);
}
public synchronized static MockServerClient getInstance() {
return mockServerClient;
}
直接new一个对象传递给类的成员变量mockServerClient,要的时候直接getInstance()直接返回,解决问题。
附上写的一个小工具: