synchronized块与方法的两种形式Java 提供synchronized关键字来实现线程同步,其本质是让多线程对同一段代码互斥访问。synchronized有两种使用方式:块同步:将synchronized作用于一个代码块,并显式指定一个监视器对象。方法同步:将synchronized修饰符直接加在方法上(实例方法或静态方法)。// 块同步synchronized(a){// 需要同步的代码}// 方法同步(实例方法)synchronizedvoidm(){// 整个方法体同步}方法同步看起来没有显式的监视器,但实际存在:非静态方法:使用当前实例this作为监视器。静态方法:使用该类的Class对象作为监视器。监视器(Monitor)的作用与锁机制监视器是每个同步块的核心对象。它的规则很简单:当一个线程进入同步块时,它会锁定监视器;其他线程必须等待直到该线程释放锁(离开同步块)才能进入。监视器不能为null,否则会抛出NullPointerException。下图示意了两个线程争夺同一监视器的过程(文字描述):线程 T1 进入同步块后锁定监视器 M,线程 T2 尝试进入时被阻塞(进入“Monitor