在用synchronized修饰类时,默认是当前类的Class对象作为锁的对象,故存在着方法锁、对象锁、类锁这样的概念。先给出以下代码感受下代码执行的时候为什么需要同步?代码可能比较枯燥,配上业务理解起来就会舒服很多,学生军训,有三列,每列5人,需要报数,每个线程负责每一列报数。之所以出现这种情况,是因为三个线程是异步的,没有同步。当报数方法加上synchronized关键字之后,就会一列一列的报数。写到这里还是要从技术层面讲下原理,当一个线程执行带有synchronized关键字的方法时,该线程会在该方法处设置一个锁,表示此方法是当前线程独占的,对应到上述业务中就是一次只能有一个队列报数。

浅析Java 并发编程中的synchronized

浅析Java 并发编程中的synchronized

浅析Java 并发编程中的synchronized

浅析Java 并发编程中的synchronized

浅析Java 并发编程中的synchronized