1.synchronized同步代码块
注意:在任何时候,最多允许一个线程拥有同步锁,谁拿到锁就进入代码块,其他的线程只能在外等着(BLOCKED)。
synchronized(同步锁){
需要同步操作的代码
}
1.1对象锁
- synchronized(this|object) {}
1.2类锁
- synchronized(类.class) {}
2.synchronized方法
public synchronized void method(){
可能会产生线程安全问题的代码
}
3.lock锁
java.util.concurrent.locks.Lock
机制提供了比synchronized代码块和synchronized方法更广泛的锁定操作,
同步代码块/同步方法具有的功能Lock都有,除此之外更强大,更体现面向对象。
Lock锁也称同步锁,加锁与释放锁方法化了,如下:
public void lock()
:加同步锁。
public void unlock()
:释放同步锁。
使用方法
在可能出现同步问题的代码前加上lock锁
在代码块结束后释放lock锁