前言:
温馨TIP: 这篇没什么
6.5使用static代码块实现单例
关于static 在 这个博客 标题虽是内部类但是也有和静态相关的东西,一这么说便知道这个标题起地不是很好;最近博客一些多,发出去之后、我便也成了观博一员;
静态初始器:静态块:一个存在类方法外面的静态块,仅在类装载时执行一次,常用初始化静态类属性;所以如6.5题,一点点存在感,代码很简洁、不写了;
6.6使用enum枚举实现单例
最近有了几次枚举,对它的认识更深了一点,当然这是题外话;enum和静态代码块的特性相似,使用枚举类时,构造方法被自动调用:
结合6.7完善展示一下代码:
/**
* Created by Administrator on 2018/7/31.
*/
//public enum MyObject4 { 这样枚举类暴露了,完善
public class MyObject4 {
public enum MyEnumSingleTon {
connectionFactory;
private Connection connection;
//private MyObject4() {
private MyEnumSingleTon() {
try {
System.out.println("构造函数");
String url = "jdbc:mysql://localhost:3306/shop";
String username = "root";
String password = "root";
String driverName = "com.mysql.jdbc.Driver";
Class.forName(driverName);
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public Connection getConnection() {
return connection;
}
}
//改调用这个新增的方法,隐藏枚举
public static Connection getConnection() {
return MyEnumSingleTon.connectionFactory.getConnection();
}
}
进程:
public class MyThread4 extends Thread {
public void run(){
for(int i =0;i<5;i++){
//System.out.println(MyObject4.connectionFactory.getConnection().hashCode());
System.out.println(MyObject4.getConnection().hashCode());
}
}
}
跑起来:
public class Run {
public static void main(String[] args) {
MyThread4 t1 = new MyThread4();
MyThread4 t2 = new MyThread4();
t1.start();
t2.start();
}
}
后面的话:
这篇是根据《Java多线程编程核心技术》的标题顺序写的,上篇该标题的时候我还纳闷为什么这个标题的顺序不对,过程中去查资料了,忘记了是按照书中顺序写的 这回事了,老了老了、不是、是中间溜的时间太长了