synchronized的几种用法

1、修饰代码块:

        ①synchronized(this) :获取当前对象锁,锁住的是当前整个对象(同同步方法)

        当一个线程已经访问到代码块,其他对象访问该代码块将会被阻塞,直到锁释放。同样,其他线程访问非synchronize块的部分。

        ②synchronized(*.class):获取class对象锁,锁住的是所有对象(同同步静态方法)

        当随意一个对象进去代码块,所有该类对象都不可进去该代码块,将会被阻塞。

        ③两个synchronize之间会有互斥性

2、修饰方法:

        ①同步静态方法:同步静态方法是指对所有同步静态方法进行加锁同步

        ②普通同步方法:同步方法的是指对实例对象本身进行加锁同步

        如果线程拥有同步和非同步方法,则非同步方法可以被多个线程自由访问而不受锁的限制。

        线程可以获得多个重进入(synchronized )锁。比如,在一个对象的同步方法里面调用另外一个对象的同步方法,则获取了两个对象的同步锁。

        

 

3、同步会影响效率,比起同步方法,更好使用同步代码块

转载于:https://my.oschina.net/u/3384249/blog/1529649

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值