线程同步经常在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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》