多个线程多个锁

多个线程多个锁:多个线程,每个线程都可以拿到自己指定的锁,分别获得锁之后,执行synchronized方法体的内容

(1).不加static关键字执行结果

运行结果:

(2).加上static关键字执行的结果

 

加static的意思是:在静态方法上 加上synchronized修饰的话,(以后获得的锁)以后这个线程调用printNum()方法时, 类级别的锁.无论以后自己实例化出多少个对象,都是没有任何关联关系的

 

 加sttaic修饰了表示类级别的锁,无论有多少个对象,都可以保证同步.


=============================================================================================================

总结:

  关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁,所以示例代码中哪个线程先执行synchronized关键字的方法,哪个线程就持有该方法所属对象的锁(Lock),两个对象,线程获得的就是两个不同的锁,他们互不影响.

  有一种情况则是相同的锁,即在静态方法上加上synchronized关键字,表示锁定.class类,类级别的锁(独占.class类).无论有多少个对象,都可以保证同步.

原文地址:https://www.cnblogs.com/curedfisher/p/11978195.html