synchronized 关键字:
- 实现线程安全:
synchronized可以用来确保多个线程对共享资源的访问是线程安全的。当一个代码块或方法使用synchronized修饰时,只有一个线程能够进入这个代码块或方法,其他线程必须等待,直到锁定的资源被释放。这样可以避免多个线程同时修改共享资源而引发的数据竞争和不一致性问题。
public synchronized void synchronizedMethod() {
// 同步方法中的代码
}
或者
synchronized (lockObject) {
// 需要同步的代码块
}
- 保证可见性:
synchronized不仅会实现互斥,还会确保在进入同步块之前,读取共享变量的线程将会从主内存中获取最新的值,并在退出同步块时将修改刷新回主内存,这样可以保证共享变量的修改对其他线程是可见的。
虽然 synchronized 是一种有效的线程同步机制,但在某些情况下可能会导致性能问题,因为它会引入一定的线程等待和竞争开销。因此,Java还提供了其他更灵活的同步工具,如 java.util.concurrent 包中的锁和并发容器,以及 java.util.concurrent.atomic 包中的原子操作类,可以用来更精细地控制线程的同步和提高性能。