synchronized是Java中的关键字,是一种同步锁。
@synchronized
的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改,保证代码的安全性。
也就是包装这段代码是原子性的,安全的。(是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行)它修饰的对象有以下几种:
1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
3.修饰一个静态方法。
4.修饰类
修饰方法的注意事项 接口方法时不能使用synchronized关键字;构造方法不能使用synchronized关键字,但可以使用synchronized代码块进行同步;
synchronized关键字无法继承;
如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的。
子类方法同步的解决方案
1.子类方法也加上synchronized 关键字
2.子类方法中调用父类同步的方法,例如:使用 super.xxxMethod()调用父类方法 3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
修饰一个代码块
一个线程访问一个对象中的synchronized(this)同步代码块时,其他试图访问该对象的线程将被阻塞。(只有当当前线程访问完该代码块之后另一个才可以访问)
当两个并发线程(thread1和thread2)访问同一个对象(syncThread)中的synchronized代码时,在同一时刻只能有一个线程得到执行,另一个线程受阻塞,必须等待当前线程执行完这个代码块以后才能执行该代码块。
标签:Synchronized,synchronized,对象,代码,用法,线程,修饰,方法 From: https://www.cnblogs.com/susuya/p/16610344.html