有两种分类方法,根据修饰的对象不同,可以分为修饰代码块和修饰方法。根据锁的类型,可以分为对象锁和类锁。两种分类方法,两两组合,有四种用法。
对象锁 | 类锁 | |
---|---|---|
修饰代码块 | synchronized (this|object){ } | synchronized (A.class){ } |
修饰函数 | public synchronized void fun(){} | public static synchronized void fun(){} |
Java每个对象中有一个内置锁,线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。
java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是对象锁作用在实例上面,而类所作用于所有的实例,属于静态的。