你所不知道的有关Java 和Scala中的同步问题
原文:Things You Didn’t Know About Synchronization in Java and Scala 译者: 李杰聪
在实际应用中所有的服务端程序都需要在多线程之间进行某种同步。大多数同步已经有框架完成了,比如我们的web服务器,DB客户端和消息框架。Java和Scala提供了大量的组件用来实现稳定的多线程程序。包括对象池,并发集合,高级锁,执行上下文等。
为了更好的理解这些组件,我们深入了解一下最常用的同步原语——对象所。这个是用synchronized 关键字来实现的,在Java中它是非常流行的多线程原语。这也是其他更复杂模式的基础,比如线程池和连接池,并发集合等。
Synchronized 关键字主要用在以下两个场景:
- 作为方法的修饰,此方法在同一个时间只能被一个线程执行。
- 把一个代码块声明为临界区,任何时间只有一个线程能访问。