在 Java 中,synchronized 是一种线程同步机制,用来保证在多线程环境下,某一段代码或某个对象在同一时间只能被一个线程访问,从而避免线程安全问题(如数据不一致、竞态条件)。
synchronized 的作用synchronized 保护的代码synchronized 的三种使用方式this)public synchronized void method() {
// 同一时刻只能有一个线程访问该对象的此方法
}
thisClass 对象)public static synchronized void method() {
// 锁的是当前类的 Class 对象
}
类名.classpublic void method() {
synchronized (this) {
// 只同步这段代码
}
}
或:
private static final Object lock = new Object();
public void method() {
synchronized (lock) {
// 自定义锁对象
}
}
✅ 推荐使用代码块,控制粒度更细,性能更好
public class Counter {
private int count = 0;
public synchronized void increment() {
count++;
}
public int getCount() {
return count;
}
}
如果不加 synchronized,多线程下 count++ 可能出错。
synchronized 的底层原理(简述)synchronized 会尝试获取锁synchronized vs Lock| 对比项 | synchronized | Lock |
|---|---|---|
| 使用难度 | 简单 | 较复杂 |
| 是否自动释放 | ✅ | ❌(需手动 unlock) |
| 可中断 | ❌ | ✅ |
| 公平锁 | ❌ | ✅ |
| 性能 | 已优化,接近 Lock | 更灵活 |
synchronized是 Java 内置的线程同步关键字,用来保证多线程下代码的安全执行。
如果你愿意,我也可以讲:
synchronized 锁升级过程volatile 的区别免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。