在Java中,synchronized关键字用于实现线程同步。它可以修饰方法或代码块,以确保在同一时间只有一个线程可以访问被修饰的代码。
-
修饰方法: 当一个方法被synchronized修饰时,该方法被称为同步方法。当一个线程调用该方法时,其他线程必须等待,直到该方法执行完成才能继续执行。
public synchronized void method() { // 同步代码块 }
-
修饰代码块: synchronized关键字还可以用于修饰代码块,这样只有拥有该对象的锁的线程才能执行该代码块。可以使用任意对象作为锁对象,例如this关键字、类的.class对象等。
public void method() { synchronized (this) { // 同步代码块 } }
或者
public void method() { Object lock = new Object(); synchronized (lock) { // 同步代码块 } }
synchronized关键字的使用可以避免多个线程同时对共享资源进行修改,从而避免了线程安全问题。但需要注意,使用synchronized会降低程序的并发性能,因为其他线程必须等待锁的释放才能执行。因此,在使用synchronized时,应尽量减少同步的范围,避免同步的代码块过长。另外,也可以使用锁的机制如Lock和Condition来实现精细化的线程同步控制。