synchronized(service)
newSingleScheduledExecutor 线程池
并发写的情况
- 缩小锁的粒度 为Service。
这样只要是与加锁的servcie不同,就可以并发的写不同service就不会有冲突了 - 另外用于执行任务的线程池是Single,只有一个线程。所以也降低了冲突。
并发读写的情况
Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,在采用更新后的实例来覆盖旧的实例列表。
这样在更新过程中就不回队赌实例列表的请求产生影响,也不会出现脏肚肚问题了。