我正在尝试理解这个Android实现,但我无法想象为什么静态字段“lockStatic”要是易失性的,因为它仅通过“getLock”方法使用并且是同步块,所以不应该存在并发或对象发布问题。
我认为只有当lockStatic可以以其他方式访问时,才需要使用volatile关键字。但是它是私有的,并且唯一处理它的方法是getLock方法。这只是一个断言吗?还是有其他原因?感谢您提供任何帮助以解决此问题。
请参考WeakfullIntentService。
abstract public class WakefulIntentService extends IntentService {
abstract protected void doWakefulWork(Intent intent);
static final String NAME=
"com.commonsware.cwac.wakeful.WakefulIntentService";
static final String LAST_ALARM="lastAlarm";
private static volatile PowerManager.WakeLock lockStatic=null;
synchronized private static PowerManager.WakeLock getLock(Context context) {
if (lockStatic == null) {
PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NAME);
lockStatic.setReferenceCounted(true);
}
return(lockStatic);
}
我认为只有当lockStatic可以以其他方式访问时,才需要使用volatile关键字。但是它是私有的,并且唯一处理它的方法是getLock方法。这只是一个断言吗?还是有其他原因?感谢您提供任何帮助以解决此问题。
请参考WeakfullIntentService。