理解Java中的synchronized关键字

理解Java中的synchronized关键字。

synchronized 是java中的一个关键字,用于多线程情况下解决线程同步问题;它可以用来修饰代码块,方法,还有静态方法

  • 1)  修饰一个代码块:被修饰的代码块叫作同步代码块,作用范围是{}括起来的代码,作用对象是根据锁对象判断.例如:1.synchronized(this){}这样它的作用对象是调用该方法的对象2. synchronized(Object.class){} 这样它的作用对象是这个类的所有对象
  • 2)  修饰一个方法:被修饰的方法叫作同步方法,作用范围是被修饰的整个方法,作用对象是调用该方法的对象
  • 3)  修饰一个静态方法:作用范围是被修饰的整个静态方法,作用对象是这个类的所有对象

做几个例题:

有如下一个类A
class A {
    public synchronized void a() {
    }
    public synchronized void b() {
    }
}
然后创建两个对象
A a1 = new A();
A a2 = new A();
然后在两个线程中并发访问如下代码:
Thread1                       Thread2

a1.a();                       a2.a();

请问二者能否构成线程同步?

这种情况是不构成同步的,上面有说到synchronized修饰的方法的作用范围是调用该方法的对象,这里显然是两个对象他们会调用各自的同步方法,不能同步

如果A的定义是下面这种呢?
class A {
    public static synchronized void a() {
    }
    public static synchronized void b() {
    }
}

  • 这种情况就构成了同步,因为synchronized修饰的静态方法的作用范围是该类的所有对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值