一个使用线程计数器来实现的小功能,没有适用场景,没有实践过。希望有经验的大神,能够帮忙纠正。
一个恶汉单例类来限定程序对应用的创建:
public class SingleHelp {
private SingleHelp() {}
private static final SingleHelp instance = new SingleHelp();
private static int HEAD_NUM = 10;
private static CountDownLatch cd = new CountDownLatch(12);
public static SingleHelp getInstance() {
if (HEAD_NUM == 0) {
try {
cd.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}else {
System.out.println("取了一个出来,还剩下:"+(HEAD_NUM--));
cd.countDown();
}
return instance;
}
}
模拟多个人点击操作:
public class TestSingHelp {
public static void main(String[] args) {
Thread t = null;
for (int i = 0; i < 50; i++) {
try {
t = new Thread(new Runnable() {
@Override
public void run() {
SingleHelp s = SingleHelp.getInstance();
System.out.println("当前第"+Thread.currentThread().getName()+"线程");
if (s == null) {
Thread.currentThread().interrupt();
throw new RuntimeException("抢完了");
}
}
},"thread"+i);
t.start();
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}
运行结果: