"Synchronized方法修饰符的使用及其限制"

需积分: 12 2 下载量 98 浏览量 更新于2024-01-11 收藏 3.33MB PPT 举报
Synchronized是Java中一种用于实现线程同步的关键字。它可以用于修饰方法或者代码块,用来控制多个线程对共享资源的访问。在本篇文章中,我们将重点讨论Synchronized的第二种用法,即在方法的声明中加入synchronized修饰符。 当我们在一个方法的声明中加入synchronized修饰符时,整个方法范围内都会对this对象进行加锁。只有获得this对象的锁标记的线程才能调用这个方法。 那么,我们来看一下哪些方法能够加上synchronized修饰符。首先,静态方法不能加上synchronized修饰符。因为静态方法是属于类而不是对象的,this关键字在静态方法中是指向类本身的,无法对this进行加锁。构造方法也不能加上synchronized修饰符。构造方法在创建对象时调用,而且构造方法是由新创建的对象所调用的,没有多个线程同时调用的情况。抽象方法也不能加上synchronized修饰符。因为抽象方法只是一个方法的声明,具体的实现由子类来完成,而synchronized修饰符只能在方法体中使用。 那么,什么时候应该使用synchronized修饰方法呢?当多个线程需要同时访问某一个共享资源,并且对这个共享资源的访问需要互斥时,我们就可以考虑使用synchronized修饰方法。synchronized修饰方法可以保证在同一时刻只有一个线程可以执行被修饰的方法,其他线程需要等待当前线程执行完毕后才能继续执行。 需要注意的是,synchronized修饰方法会对整个方法进行加锁,也就是说,当一个线程访问了一个被synchronized修饰的方法时,其他线程无法同时访问该方法,但是其他线程可以同时访问其他非synchronized修饰的方法。 另外,需要注意的是,当一个线程访问了一个对象的synchronized修饰的方法时,其他线程对该对象中其他synchronized修饰的方法的访问将被阻塞,即使这些方法是不同的方法。这是由于synchronized锁定的是对象,而不是对应的方法。因此,对于一个对象而言,同一时间只能有一个线程能够访问它的synchronized修饰的方法。 总结一下,Synchronized的第二种用法,即在方法的声明中加入synchronized修饰符,可以实现对共享资源的同步访问,保证在同一时刻只有一个线程可以执行被修饰的方法。需要注意的是,静态方法、构造方法和抽象方法都不能加上synchronized修饰符。另外,synchronized修饰方法是对整个方法进行加锁,而不是对方法中的某个语句块进行加锁,并且对一个对象的synchronized修饰的方法的访问会阻塞其他线程对该对象中其他synchronized修饰方法的访问。 以上就是Synchronized的第二种用法的一些简要介绍和总结。希望能对大家理解synchronized在方法中的使用有所帮助。