📅  最后修改于: 2023-12-03 14:42:56.263000             🧑  作者: Mango
同步是指多个线程在访问共享资源时,一次只允许一个线程进行访问。Java提供的同步机制包括synchronized关键字和Lock。
在Java中,synchronized关键字可以用来修饰方法或代码块,用于保证同一时间只有一个线程执行该方法或代码块。
public synchronized void synchronizedMethod() {
// 同步代码块
}
使用synchronized修饰的方法称为同步方法,当线程调用该方法时,会自动获取该方法所在的对象的锁(即当前对象的锁),并持有该锁执行方法,其他线程需要等待锁的释放才能继续执行。
synchronized (obj) {
// 同步代码块
}
使用synchronized修饰的代码块称为同步代码块,需要指定一个对象作为锁对象(即synchronized后的括号中的对象),当线程进入该代码块时,会先尝试获取锁对象的锁,如果获取成功则持有锁执行代码块,其他线程需要等待锁的释放才能执行。
除了synchronized关键字,Java还提供了一套显式锁机制Lock,同样用于实现同步。
Lock lock = new ReentrantLock();
lock.lock();
try {
// 同步代码块
} finally {
lock.unlock();
}
使用Lock时,需要先声明一个Lock对象,然后使用lock()方法获取锁,执行完同步代码块后需要使用unlock()方法释放锁。
Java中的同步机制可以确保线程安全,避免多个线程同时访问共享资源造成的问题。synchronized关键字和Lock都可以用于实现同步,需要根据实际情况选择合适的同步方式。