两种用法: synchronized 方法和 synchronized 块
同步方法:public synchronized void method( int args){}
同步块 : synchronized(Obj){}
synchronized 方法控制对“对象”的访问,每一个对象对应一把锁,每个synchronized 方法都必须获得调用该方法的对象的锁才能执行,否则线程会堵塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面被堵塞的线程才能获得这个锁,继续执行
缺陷:若将一个大的方法声明为synchronized将会影响效率