synchronized的使用

分析:

synchronized的几种用法:

对象锁 -- 锁在某一个实例对象上。如果该类是单例,那么该锁也具有全局锁的概念。

               实例锁对应的就是synchronized关键字。

修饰代码块 synchronied { }   synchronied(this) { } 或者 synchronied(object) { }

修饰成员方法 public synchronized void method(){}

类锁 -- 该锁针对的是类,无论实例多少个对象,那么线程都共享该锁。

全局锁对应的就是static synchronized(或者是锁在该类的class或者classloader对象上)。

    public static synchronized void method(){} //注意这里其实就是本类的class对象

    public static synchronized(类.class) void method(){}

特点:

1)synchronized关键字不能继承。
虽然可以使用synchronized来定义方法,但synchronized并不属于方法定义的一部分,因此,synchronized关键字不能被继承。

如果在父类中的某个方法使用了synchronized关键字,而在子类中覆盖了这个方法,在子类中的这个方法默认情况下并不是同步的,而必须显式地在子类的这个方法中加上synchronized关键字才可以。当然,还可以在子类方法中调用父类中相应的方法,这样虽然子类中的方法不是同步的,但子类调用了父类的同步方法,因此,子类的方法也就相当于同步了。

2)synchronized锁具有可重入的特点且是满足非公平机制




猜你喜欢

转载自blog.csdn.net/yaoyaowudi123/article/details/80227463