
线程同步经常在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 提供了一些原子类,如 AtomicInteger、AtomicBoolean、AtomicLong 等,它们提供了一些原子操作,可以保证多个线程同时访问这些变量时的线程安全。
示例代码:
private AtomicInteger counter = new AtomicInteger(0);
public void increment() {
counter.incrementAndGet();
}
public int getCounter() {
return counter.get();
}
以上就是常见的4种线程同步详解,更多的多线程内容,请查看:Java多线程编程详解(看这篇就足够了)
mikechen睿哥
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。