同步方法将方法接收器用作锁(即,
this用于非静态方法,而用于静态方法的封闭类)。
Synchronizedblocks将表达式用作锁。
因此,以下两种方法等效于锁定预期对象:
synchronized void mymethod() { ... }void mymethod() { synchronized (this) { ... }}
对于静态方法,该类将被锁定:
class MyClass { synchronized static mystatic() { ... } static mystaticeq() { syncrhonized (MyClass.class) { ... } }}
对于同步块,可以将任何非
null对象用作锁:
synchronized (mymap) { mymap.put(..., ...);}
锁定范围
对于同步方法,该锁将在整个方法范围内保持,而在
synchronized块中,该锁仅在该块范围内保持(否则称为关键节)。实际上,如果JVM
synchronized可以证明可以安全完成,则可以通过从块执行中删除一些 *** 作来进行优化。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)