您的位置:首页 > 职场人生

黑马程序员_Java基础[27]_静态同步函数

2014-05-04 09:10 183 查看
----------
android培训 、java培训
、期待与您交流! ----------
/*

 * 【【静态同步函数】】

 * 静态同步函数,对象使用的【不是this】

 * 通过验证,发现不是this        因为静态方法中,不可以定义this。

 *

 * 静态进内存的时候,内存中没有本类对象,但是,一定有该类对应的字节码文件对象
 * 类名.class  该对象的类型是: Class

 *
 * 静态的同步函数对象是,该类对应的字节码文件对象  就是   类名.class

 */

class Ticket5 implements Runnable{//方式二

    private static int tick=100;

    boolean flag=true;

    public void run(){

        if(flag){

            while(true){

                //synchronized(this){//this  不知道为什么我的程序用this其实没有出现过0

                synchronized(Ticket5.class){//更换为Ticket5.class 不在出现0  线程安全。

                    if(tick>0){

                        try{

                            Thread.sleep(10);//【a】

                        }

                        catch(Exception e){}

                        System.out.println(Thread.currentThread().getName()+"买票"+(tick--));

                    }

                }

            }

        }

        else{

            while(true)

            show();

        }

    }

    

    public static synchronized void show(){

            if(tick>0){

                try{

                    Thread.sleep(10);//【a】

                }

                catch(Exception e){}

                System.out.println(Thread.currentThread().getName()+"show"+(tick--));

            }

    }

}    

 

public class D_Th_test6{

    public static void main(String[] args) {

        Ticket4 t=new Ticket4();

        Thread t1=new Thread(t);

        Thread t2=new Thread(t);

        t1.start();

        try{

            Thread.sleep(10);//【a】

        }

        catch(Exception e){}

        t.flag=false;

        t2.start();

    }

}

-----------------------------------------------------------------------------------------------

package _Day11;

/*
 * 返回来再看看 单列设计模式

 *
 * 死锁: 同步中嵌套同步

 * 设计时一定要避免死锁。

 */

//饿汉式

/*

 class Single{

     private static final Single s=new Single();

     private Single(){}

     public static void Single getInstance(){

         return s;

     }

 }

 */

//懒汉式

class Single{

    private static Single s=null;

    private Single(){}

    public static Single getInstance(){

        

        if(s==null){

            synchronized(Single.class){

                if(s==null)

                    s=new Single();    

            }

        }

        return s;        

    }

}

public class D_Th_test7 {

}

----------
android培训、 java培训
、期待与您交流!----------

黑马官网: http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息