不是这样滴:
lock简化的不是书写,而是思路
synchronized在书写时你需要着重分析有几把锁,你需要用哪一把
同步代码块和同步函数的选择(没错,贫道亲身体验,这两货不是随时通用的!)
synchronized的同步机制是隐式的,进synchronized时入获取锁,出synchronized时释放锁
而lock则不同,锁是你自己定义的,而不是用一个已有的对象
lock是显示的,想让线程什么时候同步就lock(),想解锁就unlock(),这需要体会的:将整个锁的逻辑完全抽取出来,赤裸裸的摆在你面前,对于思路来说(个人认为)简化了
condition才是lock比较难驾驭的地方,也是lock相比于synchronized真正好用(灵活)的地方,通过条件操作线程相较于synchronized有风险的notifyAll()靠谱了不少。
个人感觉,lock用用,等熟悉了必然优越于synchronized。
当然,可能 ExecutorService 可能更优越
|