📜  Java中的同步(1)

📅  最后修改于: 2023-12-03 14:42:56.263000             🧑  作者: Mango

Java中的同步

同步是指多个线程在访问共享资源时,一次只允许一个线程进行访问。Java提供的同步机制包括synchronized关键字和Lock。

synchronized关键字

在Java中,synchronized关键字可以用来修饰方法或代码块,用于保证同一时间只有一个线程执行该方法或代码块。

同步方法
public synchronized void synchronizedMethod() {
  // 同步代码块
}

使用synchronized修饰的方法称为同步方法,当线程调用该方法时,会自动获取该方法所在的对象的锁(即当前对象的锁),并持有该锁执行方法,其他线程需要等待锁的释放才能继续执行。

同步代码块
synchronized (obj) {
  // 同步代码块
}

使用synchronized修饰的代码块称为同步代码块,需要指定一个对象作为锁对象(即synchronized后的括号中的对象),当线程进入该代码块时,会先尝试获取锁对象的锁,如果获取成功则持有锁执行代码块,其他线程需要等待锁的释放才能执行。

Lock

除了synchronized关键字,Java还提供了一套显式锁机制Lock,同样用于实现同步。

Lock lock = new ReentrantLock();
lock.lock();
try {
  // 同步代码块
} finally {
  lock.unlock();
}

使用Lock时,需要先声明一个Lock对象,然后使用lock()方法获取锁,执行完同步代码块后需要使用unlock()方法释放锁。

小结

Java中的同步机制可以确保线程安全,避免多个线程同时访问共享资源造成的问题。synchronized关键字和Lock都可以用于实现同步,需要根据实际情况选择合适的同步方式。