Synchronized用法
synchronized是Java中的关键字,是一种同步锁。
@synchronized
的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改,保证代码的安全性。
也就是包装这段代码是原子性的,安全的。(是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行)它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3.修饰一个静态方法。
4.修饰类
修饰方法的注意事项
接口方法时不能使用synchronized关键字;
构造方法不能使用synchronized关键字,但可以使用synchronized代码块进行同步;
synchronized关键字无法继承;
如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的。
子类方法同步的解决方案
1.子类方法也加上synchronized 关键字
2.子类方法中调用父类同步的方法,例如:使用 super.xxxMethod()调用父类方法
构造方法不能使用synchronized关键字,但可以使用synchronized代码块进行同步;
synchronized关键字无法继承;
如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的。
子类方法同步的解决方案
1.子类方法也加上synchronized 关键字
2.子类方法中调用父类同步的方法,例如:使用 super.xxxMethod()调用父类方法
3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
修饰一个代码块
一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。(只有当当前线程访问完该代码块之后另一个才可以访问)
当两个并发线程(thread1和thread2)访问同一个对象(syncThread)中的synchronized代码时,在同一时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)