多线程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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章