线程同步详解(4种常用线程同步方式)

线程同步详解(4种常用线程同步方式)-mikechen

线程同步经常在Java面试被问到,比如:线程同步有哪几种方式等,下面我就重点详解线程同步的4种方式@mikechen

Synchronized

使用 Synchronized 关键字可以实现方法或代码块的同步,即只允许一个线程进入方法或代码块。

示例代码:

public synchronized void synchronizedMethod() {
    // method body
}

public void synchronizedBlock() {
    synchronized (this) {
        // code block
    }
}

 

ReentrantLock

ReentrantLock 是 Java 提供的一个可重入锁实现类,它提供了与 Synchronized 相似的同步功能。

示例代码:

private ReentrantLock lock = new ReentrantLock();

public void lockMethod() {
    lock.lock();
    try {
        // method body
    } finally {
        lock.unlock();
    }
}

public void lockBlock() {
    lock.lock();
    try {
        // code block
    } finally {
        lock.unlock();
    }
}

 

Volatile

使用Volatile关键字可以实现多个线程之间的变量可见性,即一个线程修改了变量的值,其他线程能够立即看到这个修改。

示例代码:

private volatile boolean flag = false;

public void setFlag(boolean flag) {
    this.flag = flag;
}

public boolean getFlag() {
    return flag;
}

 

Atomic 原子类

Java 提供了一些原子类,如 AtomicIntegerAtomicBooleanAtomicLong 等,它们提供了一些原子操作,可以保证多个线程同时访问这些变量时的线程安全。

示例代码:

private AtomicInteger counter = new AtomicInteger(0);

public void increment() {
    counter.incrementAndGet();
}

public int getCounter() {
    return counter.get();
}

以上就是常见的4种线程同步详解,更多的多线程内容,请查看:Java多线程编程详解(看这篇就足够了)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法