Java 一直支持多线程编程,后文会详细介绍这个话题。不过要注意,并发编程不容易,有很多难以捉摸的地方。
具体而言,处理多线程时,经常必须避免多个线程同时修改同一个对象,以防对象的状态有冲突。Java 提供的 synchronized 语句可以帮助程序员,避免发生冲突。synchronized 语句的句法为:
synchronized ( expression ) {
statements
}
expression 表达式的计算结果必须是一个对象或数组。statements 是能导致破坏的代码块,必须放在花括号里。
执行语句块之前,Java 解释器先为 expression 计算得到的对象或数组获取一个排它锁(exclusive lock),直到语句块执行完毕后再释放。只要某个线程拥有对象的排它锁,其他线程就不能再获取这个锁。
在 Java 中,synchronized 关键字还可以作为方法的修饰符。应用于方法时,synchronized关键字指明整个方法都被锁定。如果 synchronized 关键字应用于类方法(静态方法),执行方法前,Java 会先为这个类获取一个排它锁。如果 synchronized 关键字应用于实例方法,Java 为类的实例获取一个排它锁。