Java开发-面试题-0041-Java 线程同步的关键字有哪些

Java开发-面试题-0041-Java 线程同步的关键字有哪些

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

(技术)微信公众号:CodeZeng1998

(生活)微信公众号:好锅

其他平台:CodeZeng1998好锅

emmm,前段时间刷面试题突然遇见这种面试题说实话确实把我整懵了,问题过于范了,回答不知道挑啥来说好,下文仅提供一部分的思路。

解答内容如下:

  • synchronized 关键字(可详细说使用在不同地方的区别)
  • volatile 关键字(保证可见性)
  • JUC包(可举例说明自己项目里具体使用到的一些类,如CountDownLatch 等)

1. synchronized 关键字

synchronized 是最常用的线程同步机制,用于保证多个线程在访问共享资源时的互斥性。

作用
  • 方法同步:在方法声明前加上 synchronized,表示整个方法是同步的,访问该方法需要获取对象的监视器锁。

    public synchronized void method() {
        // 同步方法
    }
    
  • 代码块同步:只同步某一段关键代码,而不是整个方法。

    public void method() {
        synchronized (this) {
            // 同步代码块
        }
    }
    
锁定对象
  • 静态方法:锁定的是 类的 Class 对象
  • 普通方法:锁定的是当前实例对象 (this)。

2. volatile 关键字

volatile 用于保证变量的 可见性有序性。与 synchronized 不同,它 不能保证原子性,主要用于防止线程间的变量缓存一致性问题。

作用
  • 可见性:保证一个线程对变量的修改,其他线程能够立即感知到。
  • 禁止指令重排序:确保代码按照编写顺序执行。
示例
private volatile boolean flag = true;

public void method() {
    while (flag) {
        // 其他线程修改 flag 时,当前线程能够立即感知
    }
}

3. 配合 java.util.concurrent 包使用

  • 锁机制ReentrantLock 是一种更灵活的替代 synchronized 的同步工具。
  • 信号量机制CountDownLatchCyclicBarrier 等用于线程之间的协调和同步。

如果需要更复杂的线程同步操作,推荐结合 Lock 接口及其实现类使用,例如:

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class Example {
    private final Lock lock = new ReentrantLock();

    public void method() {
        lock.lock();
        try {
            // 同步代码块
        } finally {
            lock.unlock();
        }
    }
}

总结

  • synchronized:保证互斥访问和线程安全。
  • volatile:保证变量的可见性和有序性。
  • 推荐:对于复杂同步需求,使用 Lock 和其他工具类(如 ReadWriteLockSemaphore)实现更高效、更灵活的线程同步。

以上就是本文相关的所有内容了,如果发现有误欢迎评论指正,更多内容欢迎各位关注。

在这里插入图片描述

上图是由 Pic 生成的

关键词:Cute Ice Dinosaur


更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

(技术)微信公众号:CodeZeng1998

(生活)微信公众号:好锅

其他平台:CodeZeng1998好锅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值