Java--JUC关于锁的八个问题--(synchronized)

这篇博客探讨了Java中synchronized关键字在同步方法上的应用,解释了如何影响线程执行顺序。内容包括非静态和静态同步方法的执行逻辑,以及多个对象和类锁的影响。当使用同一对象调用同步方法时,线程会按获取锁的顺序执行;静态同步方法则锁定类,确保只有一个线程能执行。总结了不同情况下的线程行为,强调了同步控制在多线程环境中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

synchronized方法测试并行

 判断线程先进行哪个方法?

先调用sendsms()方法,然后call()。如果让sendsms方法停止几秒,结果仍是一样。原因:由于被synchonized修饰了方法。锁会锁方法的调用者对象,而我们初始化是同一个对象。所以就用同一把锁,所以谁先拿到谁先执行。

 

  判断线程先进行哪个方法?

显然hello方法先执行,因为它没用synchronized修饰。

 

 判断线程先进行哪个方法?

调用者有两个对象,有两把锁。但由于sendSms()方法延迟了,所以先打印call()方法。

同步方法前加了静态方法

 

  判断线程先进行哪个方法?

static类一加载就有了。类全局唯一。于是锁了类,于是两个方法也用的同一个锁。所以在延迟几秒后执行先发短信,再打电话。

如果这个初始化两个对象(person),结果仍然会是这样。因为它锁的是类!把person类锁了!

如果初始化一个对象,但是一个静态同步方法,一个不是静态同步方法而是普通的同步方法。打电话方法先执行,然后再发短信方法。一个是锁的类,一个锁的方法调用者。所以先打电话方法。

如果初始化两个对象,但是一个静态同步方法,一个不是静态同步方法而是普通的同步方法。打电话方法先执行,然后再发短信方法。一个是锁的类,一个锁的方法调用者。所以先打电话方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值