客户端锁定

prv*_*rvn 5 java multithreading

以下是JCIP的摘录

在此输入图像描述

作者说,为了使上面的代码线程安全,我们必须使用客户端锁定.

要使此方法有效,我们必须使用List使用的相同锁,方法是使用客户端锁定或外部锁定.客户端锁定需要保护使用某个对象X的客户端代码,其中锁X用于保护自己的状态.为了使用客户端锁定,您必须知道X使用什么锁.

在此输入图像描述

为什么我们不能简单地将List <E>对象设置为私有以使ListHelper类是线程安全的?

Tho*_*mas 6

在这种情况下,每个实例ListHelper都包含自己的列表,您可以将该列表设为私有,并在ListHelper实例上进行同步.我想这是一个有点构造的例子,用尽可能少的代码来表达观点.IMO的名称ListHelper意味着我可以传递一个外部列表,该列表可以被多个ListHelper实例清楚地重用.

我要说的是:给定代码并且不改变list(可能会破坏其他代码)的可见性,您可以list比当前ListHelper实例更好地同步.