同步代码块

同步代码块

同步代码块

锁多条语句操作共享数据,可以用同步代码块实现

格式:

synchronized(任意对象){
    多条语句操作共享数据的代码
}

好处和弊端

同步方法

就是把synchronized关键字加到方法上

格式:

修饰符 synchronized 返回值类型 方法名(方法参数) {}

同步代码块和同步方法的区别

同步方法的锁对象是this

同步静态方法

格式:

修饰符 static synchronized 返回值类型 方法名(方法参数){ }

死锁

线程死锁是指由于两个或多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行

锁的嵌套会导致死锁:

public static void main(String[] args) {
        Object objA = new Object();
        Object objB = new Object();

        new Thread(()->{
            while (true){
                synchronized (objA){
                    // 线程一
                    synchronized (objB){
                        System.out.println("小康同学正在走路");
                    }
                }
            }
        }).start();

        new Thread(()->{
            while (true){
                synchronized (objB){
                    //线程二
                    synchronized (objA){
                        System.out.println("小薇同学正在走路");
                    }
                }
            }
        }).start();
    }