在 Java 中,synchronized 是关键字(keyword),用于实现线程同步,保证在多线程环境下对共享资源的安全访问,避免数据不一致问题。
synchronized 是什么?synchronized 是 Java 内置的锁机制,用来:
它是 悲观锁、可重入锁、非公平锁。
synchronized?class Counter {
int count = 0;
void add() {
count++;
}
}
多个线程同时调用 add(),可能导致 count 结果错误。
原因:count++ 不是原子操作。
synchronized 的三种用法this)public synchronized void method() {
// 同一对象,同一时间只能一个线程执行
}
✅ 锁的是:当前实例对象
public static synchronized void method() {
// 所有线程共享一把锁
}
✅ 锁的是:类的 Class 对象(如 Counter.class)
Object lock = new Object();
public void method() {
synchronized (lock) {
// 只锁这段代码
}
}
✅ 锁的是:括号里的对象
synchronized 保证什么?| 特性 | 说明 |
|---|---|
| 原子性 | 同一时间只有一个线程执行 |
| 可见性 | 修改后立刻对其他线程可见 |
| 有序性 | 一定程度防止指令重排 |
同一个线程可以多次获取同一把锁:
synchronized void a() {
b();
}
synchronized void b() {}
✅ 不会死锁
synchronized 和 Lock 的区别| 对比项 | synchronized | Lock |
|---|---|---|
| 使用方式 | 关键字 | 接口 |
| 自动释放 | ✅ | ❌(需手动) |
| 可中断 | ❌ | ✅ |
| 公平锁 | ❌ | ✅ |
| 性能 | JDK 优化后很好 | 更灵活 |
synchronized是 Java 用来保证多线程安全的同步锁,最简单的并发控制方式。
如果你愿意,我可以:
synchronized vs volatile免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。