线程安全之懒汉式


package Project4;
class test implements Runnable{
    public void run(){
        Bank.getBank();
    }
}
//class Bank{
//    public static  Bank bank=null;
//    //public static Bank getBank(){
//
//    /*效率稍微差,因为当第一个bank进来时候,后面的进来已经没有什么意义了*/
//    public static synchronized Bank getBank(){
//        if(bank==null){
//        bank=new Bank();
//            System.out.println("1");
//        }
//
//        return bank;
//    }
//}
class Bank {
    public static Bank bank = null;
    //public static Bank getBank(){

    /*两个if是对上面的改进*/
    public static Bank getBank() {
        if (bank == null)
            synchronized (Bank.class) {
                if (bank == null) {
                    bank = new Bank();
                    System.out.println("1");
                }


            }
        return bank;
    }
}


public class TestBank {
    public static void main(String[] args){
        test r=new test();
        Thread a1=new Thread(r);
        Thread a2=new Thread(r);
        Thread a3=new Thread(r);
        a1.start();
        a2.start();
        a3.start();

    }
}