synchronized与static synchronized的区别

大家在学习java多线程的时候肯定会遇到这个问题,而且在面试的时候也可能会谈到java多线程这一块的知识。今天我们就来看看这个东西~~~

synchronized 这个是对类实例进行加锁,可以简称为“实例锁”或者是“对象锁”。当某个线程调用synchronized方法的时候,就会给它加上了一个锁,其他线程就会无法访问,等到这个锁被释放,别的线程拿到这个锁的时候,才可以访问该方法。

static synchronized这个是“全局锁”或者是“类锁”,该锁针对的是类,不管实例了多少个对象,线程都共享该锁。

下面我们来看代码:

import java.util.concurrent.TimeUnit;

public class Test {
    public static void main(String[] args) {
        Phone phone1 = new Phone();
        Phone phone2 = new Phone();
        
        //这里使用的是lambda表达式
        new Thread(() -> {phone1.listening(); }, "A线程").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        new Thread(() -> {phone2.reading(); }, "B线程").start();
    }
}

class Phone{
    
    public static synchronized void listening() {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("该手机正在播放音乐~");
    }

    public static synchronized void reading() {
        System.out.println("该手机正在显示电子书~");
    }
}

运行结果是:
在这里插入图片描述
但是当我把reading方法上的static 这个关键字去掉后,代码是这样的 :

import java.util.concurrent.TimeUnit;

public class Test {
    public static void main(String[] args) {
        Phone phone1 = new Phone();
        Phone phone2 = new Phone();
        
        //这里使用的是lambda表达式
        new Thread(() -> {phone1.listening(); }, "A线程").start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        
        new Thread(() -> {phone2.reading(); }, "B线程").start();
    }
}

class Phone{
    
    public static synchronized void listening() {
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("该手机正在播放音乐~");
    }

    public synchronized void reading() {
        System.out.println("该手机正在显示电子书~");
    }
}

结果是:
在这里插入图片描述
好了,大家在仔细品品~~~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值