立即加载|饿汉模式
package multiply.com.test;
public class Run {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
package multiply.com.test;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println(MyObject.getInstance().hashCode());
}
}
package multiply.com.test;
public class MyObject {
private static MyObject object = new MyObject();
public static MyObject getInstance() {
return object;
}
}
1213024637
1213024637
1213024637
延迟加载|懒汉模式
package multiply.com.test;
public class MyObject {
private static MyObject object;
private MyObject()
{
}
public static MyObject getInstance() {
if (null == object) {
try {
Thread.sleep(2000);
object = new MyObject();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return object;
}
}
package multiply.com.test;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println(MyObject.getInstance().hashCode());
}
}
package multiply.com.test;
public class Run {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
106990145
355386388
1213024637
package multiply.com.test;
public class Run {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
package multiply.com.test;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println(MyObject.getInstance().hashCode());
}
}
package multiply.com.test;
public class MyObject {
private static volatile MyObject object;
public static MyObject getInstance() {
if (null == object) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (MyObject.class) {
if (null == object) {
object = new MyObject();
}
}
}
return object;
}
}
2042504460
2042504460
2042504460
使用静态内置类实现单例模式
package multiply.com.test;
public class Run {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
MyThread t3 = new MyThread();
t1.start();
t2.start();
t3.start();
}
}
package multiply.com.test;
public class MyThread extends Thread {
@Override
public void run() {
super.run();
System.out.println(MyObject.getInstance().hashCode());
}
}
package multiply.com.test;
public class MyObject {
private static class MyObjectHandler {
private static MyObject object = new MyObject();
}
public static MyObject getInstance() {
return MyObjectHandler.object;
}
}
1282593964
1282593964
1282593964