当用Synchronized修饰某个方法的时候,表示该方法都对当前对象加锁。
给方法加Synchronized和用Synchronized修饰对象的效果是一致的。
一个线程可以拿到多个锁标记,一个对象最多只能将monitor给一个线程。
Synchronized是以牺牲程序运行的效率为代价的,因此应该尽量控制互斥代码块的范围。
方法的Synchronized特性本身不会被继承,只能覆盖。
线程因为未拿到锁标记而发生的阻塞不同于前面五个基本状态中的阻塞,称为锁池。
每个对象都有自己的一个锁池的空间,用于放置等待运行的线程。
这些线程中哪个线程拿到锁标记由系统决定。
1 package TomTexts; 2 3 public class TomTexts_22 { 4 public static void main(String args[]) 5 { 6 int i,a; 7 try { // 监视一代码块 8 i=0; 9 a=42/i; 10 return; 11 } 12 catch (ArithmeticException e) 13 { //捕获一个被零除异常 14 System.out.println("被零除"); 15 } 16 } 17 18 }