老师好,我看有些源码,synchronized来锁住要操作的对象来保证对象的并发的,而且一般都是这么用的。比如ConcurrentHashMap中put()锁住节点第一个。
我看到另外一些地方synchronized锁住的是一个final new Object()来保证另外一个对象的并发的,比如Tomcat中的servicesLock,在添加、移除、查找、启动服务时都锁住了这个对象,而其服务的集合简单定义。
private Service services[] = new Service[0];
private final Object servicesLock = new Object();
而且通篇servicesLock只在锁定时用了一下,别的地方都没有使用(包括getset)。
这么做有什么好处吗?