Android应用开发中草率使用synchronized同步关键字的隐患

本文探讨了在Android应用开发中,过度依赖`synchronized`关键字实现线程安全可能导致的问题。通过分析单例模式下,多个线程共享同一锁(this)的风险,指出这种做法可能引起ANR,尤其是在UI线程与工作线程并发操作时。开发者应当关注锁的粒度,避免所有方法共用一把锁,而是根据需求选择独立的或特定的锁对象,以确保线程安全并防止性能下降。

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

Android应用中,对于很多类似XXXManager的业务逻辑类,很多都用单例模式。好处很多,比如保持数据的原子性和一致性。同时,往往存在主线程和各种工作线程,需要保证单例中的很多业务逻辑达到线程安全。对于单例,实现线程安全的最简单方法就是在method前面加个synchronized了事。但这样做其实是有隐患的,尤其是多人开发同一个XXXManager的时候。

 

Public synchronized void doSomeThing() {}

Java中,这样的一个定义相当于

Public void doSomeThing() {synchronized(this) {}}

即对象作为锁,所有调用这个对象的方法的线程将共同争夺这个锁,又因为是单例,所以实际上同一个虚拟机下(即同一个Android应用进程),所有的线程都共同争夺这个锁。这样实际上

Public synchronized void doSomeThing(){}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值