多线程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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值