synchronized关键字修饰代码块
来源:互联网 发布:好帮手软件简介 编辑:程序博客网 时间:2024/06/04 01:21
转载请注明出处:http://blog.csdn.net/xingjiarong/article/details/47916703
在上一篇博客中我们介绍了synchronized关键字修饰方法的用法,我们接着介绍synchronized关键字。除了修饰方法之外,还可以修饰代码块,一共有以下5种用法。
一、this
- 1
- 2
- 3
- 1
- 2
- 3
这里的this指的是执行这段代码的对象,synchronized得到的锁就是this这个对象的锁,这种写法等价于我们上一篇博客中讨论的:
- 1
- 2
- 3
- 1
- 2
- 3
二、A.class
- 1
- 2
- 3
- 1
- 2
- 3
这里A.class得到的是A这类,所以synchronized关键字得到的锁是类的锁,这种方法同下面的方法功能是相同的:
- 1
- 2
- 3
- 1
- 2
- 3
所有需要类的锁的方法等不能同时执行,但是它和需要某个对象的锁的方法或者是不需要任何锁的方法可以同时执行。
三、object.getClass()
- 1
- 2
- 3
- 1
- 2
- 3
这种方法一般情况下同第二种是相同,但是出现继承和多态时,得到的结果却是不相同的。所以一般情况下推荐使用A.class的方式。
四、object
- 1
- 2
- 3
- 1
- 2
- 3
这里synchronized关键字拿到的锁是对象object的锁,所有需要这个对象的锁的方法都不能同时执行。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
在上边的例子中试图使用这种方法达到互斥方法打印方法,但是事实是这样做是没有效果的,因为每个Trans对象都有自己的Object对象,这两个对象都有自己的锁,所以两个线程需要的是不同锁,两个锁之间没有任何相互作用,所以不会起到互斥作用。
五、static object
上边的代码稍作修改就可以起到互斥作用,将Trans类中Object对象的声明改为下面这样:
- 1
- 1
这样不同的类使用的就是同一个object对象,需要的锁也是同一个锁,就可以达到互斥的效果了。
经过两篇博客的介绍,我们详细的讨论了synchronized关键字的用法,看似非常复杂,其实抓住要点之后还是很好区分的,只要看synchronized获得的是哪个对象或者类的锁就行啦,其他需要这个锁的方法都不能同时执行,不需要这个锁的方法都能同时执行。
最后还要告别一个误区,相信大家都不会再犯这种错误了,synchronized锁住的是一个对象或者类(其实也是对象),而不是方法或者代码段。
- synchronized关键字修饰代码块
- java多线程(五)synchronized关键字修饰代码块
- java多线程(五)synchronized关键字修饰代码块
- JAVA Synchronized 修饰代码块;
- Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
- Java 多线程5:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)
- 一张图讲解对象锁和关键字synchronized修饰方法(代码块)
- 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块)
- java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
- synchronized关键字修饰方法
- Java Synchronized修饰静态方法普通方法和代码块
- java中synchronized修饰的方法和代码块
- java中synchronized修饰的方法或代码块和static synchronized修饰方法或代码块的区别
- synchronized关键字锁住的是对象还是代码块
- lamp下安装zabbix
- 机器学习之K-近邻算法
- 学习js正则表达式
- poj3580:SuperMemo(块状链表/Splay)
- 号码加密
- synchronized关键字修饰代码块
- Mondriaan's Dream POJ
- 什么叫做第三方支付?
- 用c++实现日期类函数的重载
- ContentObserver内容监听者(内容观察者)
- 模块
- 关于css的选择器
- Android ContentProvider
- 服务状态的工具类