[知了堂學習筆記]_線程同步

請關注“知了堂學習社區”,地址:http://www.zhiliaotang.com/portal.php

鎖:保護資源—-資源:衛生間、線程:上衛生間的人、鎖:衛生間的門
一把鎖只有一把鑰匙
只有執行完被鎖住的程序塊鑰匙才能被釋放
鎖保護誰:成員屬性/靜態成員屬性
鎖有幾種:this—-當前對象的鎖

package thread;

public class Thread_6 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        final Method m = new Method();
        Thread t1 = new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                m.m1();
            }
        });
        Thread t2 = new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                m.m2();
            }
        });
        t1.start();
        t2.start();
    }

}
class Method{
    public void m1(){
        synchronized (this) {
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName()+" "+i);
            }
        }
    }
    public void m2(){
        synchronized (this) {
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName()+" "+i);
            }
        }
    }
}

類.class—-當前類的class對象的鎖
成員屬性
方法上加鎖—-鎖就是this對象的鎖
靜態方法加鎖—-class實例的鎖
鎖屬於誰:
鎖是屬於對象的
每一個對象都有一把唯一的鎖

package thread;

public class Thread_5 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        SaleTask sale = new SaleTask();
        Thread t1 = new Thread(sale);
        t1.setName("網絡");
        Thread t2 = new Thread(sale);
        t2.setName("電話");
        Thread t3 = new Thread(sale);
        t3.setName("現場");
        t1.start();
        t2.start();
        t3.start();
    }

}
class SaleTask implements Runnable{

    int id = 100;
    @Override
    public void run() {
        while(true){
            synchronized (this) {//t1,t2,t3拿到鑰匙,且只有一把鑰匙
                if(id>0){
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println("賣票"+id--);
                }else{
                    System.out.println("票賣完");
                    break;
                }
            }//運行到這裏歸還鑰匙
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章