多線程2

同步 synchronized 同步代碼塊 來給要操作的數據上鎖

 同步的優點和缺點  : 
      缺點 : 線程的工作的效率變低了
      優點 : 更安全     

同步的前提:
    多個線程同時操作共享同一數據的時候 

 同步代碼塊需要注意的點:鎖對象Object對象的New的位置 

 同步代碼塊
 synchronized(鎖對象){
 }  

同步函數的鎖  Ticket.class 當前類的字節碼文件對象 也可以作爲鎖的對象 

懶漢式解決多線程安全的問題 
    class Person{
    private static Person p;
    private Person(){
        }
    public static Person getInstance(){
    //t0 t1 儘量少去判斷鎖 
    if(p == null){
        synchronized (Person.class) {//用類的字節碼文件對象
            if(p == null){
                p = new Person();
                    }
                }
            }
    return p;
        }
    }

死鎖 
class{
    public static final Lock locka = new Lock();
    public static final Lock lockb = new Lock();
} 

class Demo implements Runnable{
    private boolean flag;

    public Demo(boolean flag) {
        this.flag = flag;
}
@Override
public void run() {
        if(flag){
            while(true){
                synchronized (Lock.locka) {
                    System.out.println("if locka...");  //t1
                    synchronized(Lock.lockb){
                        System.out.println("if lockb..");
                    }
                }
            }
        }else{////t1 t2
            while(true){
                synchronized (Lock.lockb) {
                    System.out.println("else lockb..");//t2
                    synchronized(Lock.locka){
                        System.out.println("else locka...");
                    }
                }
            }
        }
    }
} 

測試類 
    public class DeadLockDemo {
    public static void main(String[] args) {
    Demo d1 = new Demo(true);
    Demo d2 = new Demo(false);
    Thread t1 = new Thread(d1);
    Thread t2 = new Thread(d2);
    t1.start();
    t2.start();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章