[Java] synchronized在代码块中修饰.class与this的区别

    synchronized是java中的关键字,表示同步,可以在多线程环境中起到锁的作用。它是jvm层面的锁,不需要人为获取释放锁资源,由jvm决定。

    synchronized可以直接用在方法上,这种用法和synchronized在代码块中修饰this是一样的。

    synchronized也可以直接用在static静态方法上,这种用法和synchronized在代码块中修饰.class类似,说类似是因为代码块粒度更小一些。

    它也可以用在代码块中,这时候它可以修饰一个类对象.class,一个全局对象lock,或者this。

     一般我们关注的就是修饰.class和this的区别。

     修饰.class,就是表示多线程调用该类的不管什么实例,所有实例共用一把锁。

     修饰this,多线程调用该类的实例,如果每个线程都有一个实例,那么每个实例都有各自的锁,他们互相不影响。如果多线程去竞争一个实例,那么这个锁就只有一把,多线程去争一个资源。

    下面通过一个示例来看看他们的区别:

package com.xxx.lock;
import java.util.Date;
public class SynchronizedExample {
    public static void main(String[] args) {
        for(int i=0;i<5;i++){
            BusinessService businessService = new BusinessService();
            new BusinessThread(businessService).start();
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值