/*
可供多线程调用的只能有一个在执行的原子操作实现
*/
public class TAtomOpt {
boolean b = false;
private static TAtomOpt ins = null;
static long n = 0l;
private TAtomOpt() {
}
public static TAtomOpt getInstance(){
return ins==null?ins=new TAtomOpt():ins;
}
public void atom(){
long c = ++n;
System.out.println(c+" 执行一次");
try{
Thread.sleep(1000L);
}catch(Exception e){
;
}
System.out.println(c+" 执行完毕");
b = false;
}
public synchronized boolean setFlag(){
if(b){
return false;
}else{
b = true;
return true;
}
}
public synchronized void clearFlag(){
b = false;
}
public void doAtom(){
if(setFlag()){
atom();
clearFlag();
}
}
public static void main(String[] args) {
for(int i=0; i<1000; i++){
new T().start();
}
}
}
class T extends Thread{
public void run(){
for(int i=0; i<100; i++){
TAtomOpt.getInstance().doAtom();
}
}
}