1修饰一个方法
在方法前加关键字synchronized即可,锁对象属于类的实例
synchronized public void add(){
//todo
}
注意:
1)A线程持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized方法
2)同步不具有继承性
子类覆盖了父类synchronize关键字修饰的方法,若子类方法没有用synchronized修饰,则默认没有同步
2synchronized同步语句块
同步方法的弊端:当同步方法执行较长时间任务时,等待时间长
1)当一个线程访问object的一个synchronized同步代码块时,另一个线程仍然可以访问该object对象中的非synchronized(this)同步代码块,相比于同步方法缩小了同步范围,运行时间缩短,运行效率加快
2)当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对同一个object中所有synchronized(this)同步代码块的访问将被阻塞
3)synchronized(this)锁定的是当前对象
4)多个线程调用同一个对象中不同名称的synchronized同步方法或是synchronized(this)同步代码块时,调用的效果就是按顺序执行,也就是同步的,阻塞的
3将任意对象作为对象监视器synchronized(非this对象x)
4静态同步synchronized方法与synchronized(class)代码块,给Class类上锁,锁定的是类的所有对象
public class Service{
public static void printA(){
synchronized(Service.class){
}
}
}