多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容
(1).不加static关键字执行结果
运行结果:
(2).加上static关键字执行的结果
加static的意思是:在静态方法上 加上synchronized修饰的话,(以后获得的锁)以后这个线程调用printNum()方法时, 类级别的锁.无论以后自己实例化出多少个对象,都是没有任何关联关系的
加sttaic修饰了表示类级别的锁,无论有多少个对象,都可以保证同步.
=============================================================================================================
总结:
关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,所以示例代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),两个对象,线程获得的就是两个不同的锁,他们互不影响.
有一种情况则是相同的锁,即在静态方法上加上synchronized关键字,表示锁定.class类,类级别的锁(独占.class类).无论有多少个对象,都可以保证同步.