synchronized 之我见
来源:互联网 发布:python自动点广告赚钱 编辑:程序博客网 时间:2024/06/05 00:16
深刻理解synchronized
(1)sychronized的字面意思是同步。他在java中的作用是保证多线程中数据的同步。
(2)你应该把synchronized理解为同步锁子。他的精髓是你锁定的对象是什么。
根据锁定的对象的不同大概有这样几种用法:
<1> 锁定类:
第一种情况:
public class Test{
public void method(){
synchronized(Test.class){
// 需要同步的代码
}
}
}
第二种情况:
public class Test{
public synchronized static void method(){
// 需要同步的代码
}
}
这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
只有一个地方获得了本类的锁,在执行其中的一个类同步代码部分。
<2> 锁定类的实例。
第一种情况:
public class Test{
public synchronized void method(){
// 需要同步的代码
}
}
第二种情况:
public class Test{
public void method(){
synchronized(this){
// 需要同步的代码
}
}
}
这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
只有一个地方获得了本类的实例的锁,在执行其中的某个类的同一个实例的同步代码部分。
第三种情况:
public class Test{
byte[] lock = new byte[0];
public void method(){
synchronized(lock){
// 同步的代码
}
}
}
本质上这三种情况是一样的都是获得的对象的实例的锁。
参考:(1)http://blog.csdn.net/yaerfeng/article/details/7254734
(2)http://my.oschina.net/20076678/blog/173166
(1)sychronized的字面意思是同步。他在java中的作用是保证多线程中数据的同步。
(2)你应该把synchronized理解为同步锁子。他的精髓是你锁定的对象是什么。
根据锁定的对象的不同大概有这样几种用法:
<1> 锁定类:
第一种情况:
public class Test{
public void method(){
synchronized(Test.class){
// 需要同步的代码
}
}
}
第二种情况:
public class Test{
public synchronized static void method(){
// 需要同步的代码
}
}
这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
只有一个地方获得了本类的锁,在执行其中的一个类同步代码部分。
<2> 锁定类的实例。
第一种情况:
public class Test{
public synchronized void method(){
// 需要同步的代码
}
}
第二种情况:
public class Test{
public void method(){
synchronized(this){
// 需要同步的代码
}
}
}
这两种情况的效果是一样的同步的都是本类,也就是说同一时间,不同线程中,
只有一个地方获得了本类的实例的锁,在执行其中的某个类的同一个实例的同步代码部分。
第三种情况:
public class Test{
byte[] lock = new byte[0];
public void method(){
synchronized(lock){
// 同步的代码
}
}
}
本质上这三种情况是一样的都是获得的对象的实例的锁。
参考:(1)http://blog.csdn.net/yaerfeng/article/details/7254734
(2)http://my.oschina.net/20076678/blog/173166
0 0
- synchronized 之我见
- 软件测试之我见
- 学校课程设计之我见
- 项目经理之我见
- Java性能之我见
- 地产泡沫之我见
- 项目经理之我见
- 软件设计之我见
- 移动开发之我见
- 国外电影之我见
- singleton之我见
- SiteMesh 之我见
- jsp template之我见
- jsp template之我见
- 游戏策划之我见
- java模式之我见
- "没有银弹"之我见
- dm分区之我见
- freemarker中exists和if_exists区别及其序列空值的判断
- Ruby on Rails技术(二)——RoR开发环境搭建
- hdu2149
- 第十三周 项目5:(2)完整复制字符串
- Ruby on Rails技术(三)——基本语法(标识符定义)
- synchronized 之我见
- 英文名字的误区及起名方法
- 转自 PHP100中文网 初学编程
- Android Studio导入项目失败
- Android Manifest之元素中文注释
- Ruby on Rails技术(四)——基本语法(流程控制语句)
- 第十三周项目3
- 微信公众平台推出“微信连WiFi”新功能插件
- android布局性能优化