代码块
普通代码块
{
执行内容
}
编写在顺序执行的代码流程中的代码块
构造代码块
{
执行内容
}
构造代码块不是构造方法,随着对象的创建会执行一次,且在构造方法之前。适用于在对象创建时必须执行的操作写在构造代码块。无论用户调用哪一个构造方法创建对象都会执行构造代码块。
同步代码块
synchronized(obj)
{
//需要被同步的代码块
}
其中,obj 称为同步监视器,也就是锁,原理是:
当线程开始执行同步代码块前,必须先获得对同步代码块的锁定。并且任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。
public synchronized void testThread()
{
//需要被同步的代码块
}
对于关键字synchronized修饰的方法,不需要再指定同步监视器,这个同步方法(非static方法)无需显式地指定同步监视器,同步方法的同步监视器就是this,也就是调用该方法的对象。
注意,synchronized可以修饰方法,修饰代码块,但是不能修饰构造器、成员变量等。
静态代码块
static {
执行内容
}
随着类加载(第一次使用),静态代码块执行,因为类只加载了一次,所以静态代码块只执行一次。