Java 关键字:synchronized详解

   synchronized 是 Java 语言中的一个关键字,用于控制多线程访问共享资源时的同步问题。它可以确保多个线程在同一时刻只能有一个线程在执行某个代码块或方法,从而避免多线程同时访问导致的数据不一致问题。

在 Java 中,synchronized 关键字可以用在方法和代码块上。

1. synchronized 修饰方法

        当用 synchronized 修饰方法时,该方法称为同步方法。同步方法在同一时刻只允许一个线程执行,其他尝试访问该方法的线程将被阻塞,直到当前线程执行完毕。

public synchronized void synchronizedMethod() {  
    // 同步方法体  
}

2. synchronized 修饰代码块

    synchronized 还可以用来修饰代码块,被称为同步块。同步块在同一时刻也只允许一个线程执行

public void method() {  
    synchronized (this) {  
        // 同步块  
    }  
}

        在同步块中,需要指定一个对象作为锁。当线程尝试执行同步块时,它需要获得锁才能执行。如果锁被其他线程持有,则该线程会被阻塞,直到锁被释放。

3、注意点:

  1. synchronized 关键字获得的锁都是对象锁,而不是把一段代码或方法当做锁。在 Java 中,每个对象都有一个内置锁(也称为监视器锁或 monitor lock),synchronized 就是使用这种内置锁来实现同步的。
  2. synchronized 关键字修饰的方法或代码块在执行完毕后会自动释放锁,不需要手动释放。
  3. synchronized 关键字是非公平锁,它无法保证等待的线程获取锁的顺序。
  4. 使用 synchronized 关键字需要小心死锁的发生。死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。
  5. synchronized 会降低程序的运行效率,因此应尽量减少使用 synchronized 的范围,只在必要时使用。
  6. 在选择同步方法或同步块时,应尽量选择同步块,因为同步块的同步范围较小,可以提高程序的运行效率。

总的来说,synchronized 是一个重要的多线程控制关键字,但需要谨慎使用以避免潜在的问题。

  • 38
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

guochangjin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值