[译]Java并发:@GuardedBy----Android中的注解

原文链接:https://samxiangyu.wordpress.com/2015/02/20/java-concurrency-guardedby/
当阅读Android源码工程的DownloadService类时,我注意到使用了@GuardedBy注解,这是类似于Java关键字synchronized关键字,但使用代替锁。可以这样使用这个注解:

public class foo {
  @GuardedBy("this")
  public String str;
}

正如我们所看到的,用法是@GuardedBy(lock),这意味着有保护的字段或方法只能在线程持有锁时被某些线程访问。 我们可以将锁定指定为以下类型:

  • this : 在其类中定义字段的对象的固有锁。
  • class-name.this : 对于内部类,可能有必要消除“this”的歧义; class-name.this指定允许您指定“this”引用的意图。
  • itself : 仅供参考字段; 字段引用的对象。
  • field-name : 锁对象由字段名指定的(实例或静态)字段引用。
  • class-name.field-name : 锁对象由class-name.field-name指定的静态字段引用。
  • method-name() : 锁对象通过调用命名的nil-ary方法返回。
  • class-name :指定类的Class对象用作锁定对象。

例子:

public class BankAccount {
  private Object credential = new Object();

  @GuardedBy("credential")
  private int amount;
}

在上面的代码片段中,当有人获得了凭据的同步锁定时,可以访问金额,因此,BankAccount中的金额由凭据保护。 让我们给这个类添加一些东西。

public class BankAccount {
  private Object credential = new Object();

  @GuardedBy("credential")
  private int amount;

  @GuardedBy("listOfTransactions")
  private List<Transaction> listOfTransactions;
}

我们现在有一个在BankAccount的事务列表。 List对象有许多元素,因此它具有对列表中所有元素的引用。 这里我们使用@GuardedBy(“listOfTransactions”)来指定锁与listOfTransactions所引用的对象相关联。 换句话说,有人必须持有所有事务的锁,以便保持此List对象的锁定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值