上代码
package com.nice;
/**
* @author nice
*/
class Gril{
private volatile static Gril gril;
/**
*这里的参数名BOY应该是boy,因为之前写的是final类型忘了改回去
*/
private static Boy BOY ;
static {
BOY = Boy.getBoy();
}
private Gril() {
System.out.println("女朋友只能有一个,是私有的");
}
/**
* 获得女朋友
* @return Gril实体类
*/
public static Gril getGril() {
if (gril == null) {
synchronized (Gril.class) {
gril = new Gril();
}
}
else {
throw new RuntimeException("您的男朋友已出轨");
}
return gril;
}
/**
* 想男朋友了(递归引用,无限循环) 当然这里用wait notify会更好
*/
public static void thinkBoy() {
System.out.println("我想我的男朋友了");
try {
Thread.sleep(520);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Boy boy = Boy.getBoy();
BOY.thinkGril();
}
}
class Boy{
private volatile static Boy boy;
private static Gril GRIL ;
static {
GRIL = Gril.getGril();
}
private Boy() {
System.out.println("男朋友只能有一个,是私有的");
}
/**
* 获得男朋友
* @return Boy实体类
*/
public static Boy getBoy() {
if (boy == null) {
synchronized (Gril.class) {
boy = new Boy();
}
} else {
throw new RuntimeException("您的女朋友已出轨");
}
return boy;
}
public static void thinkGril() {
System.out.println("我想我的女朋友了");
try {
Thread.sleep(520);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Gril gril = Gril.getGril();
GRIL.thinkBoy();
}
}
public class LoveTest {
public static void main(String[] args) {
Boy boy = Boy.getBoy();
boy.thinkGril();
}
}
啊哈哈哈哈哈哈
本文通过一个有趣的示例,展示了如何使用单例模式创建唯一实例,并确保线程安全。代码中包含了Gril和Boy两个类,它们分别代表女朋友和男朋友,通过静态内部类实现单例模式,同时使用synchronized关键字确保多线程环境下对象创建的安全性。
1877

被折叠的 条评论
为什么被折叠?



