方法锁和静态方法锁的区别
来源:互联网 发布:淘宝为什么分数低 编辑:程序博客网 时间:2024/05/18 01:13
静态方法,需要对Class对象加锁。
非静态方法,需要对本对象(this)加锁。
非静态方法举例,例如,下面的两个例子的效果是完全一样的。
public synchronized int getX() {
return x++;
}
return x++;
}
与
public int getX() {
synchronized (this) {
return x;
}
}
synchronized (this) {
return x;
}
}
静态方法举例,例如,下面的两个例子的效果是完全一样的。
public static synchronized int setName(String name){
Xxx.name = name;
}
与
public static int setName(String name){
synchronized(Xxx.class){
Xxx.name = name;
}
}
synchronized(Xxx.class){
Xxx.name = name;
}
}
一定要注意哪个对象正被用于锁定:
1、调用同一个对象中非静态同步方法的线程是互斥的。如果是不同对象,则每个线程有自己的对象的锁,线程间彼此互不干预。
2、调用同一个类中的静态同步方法的线程将是互斥的,它们都是锁定在相同的Class对象上。
3、静态同步方法和非静态同步方法将永远不是互斥的,因为静态方法锁定在Class对象上,非静态方法锁定在该类的对象上。
4、对于同步代码块,要看清楚什么对象已经用于锁定(synchronized后面括号的内容)。在同一个对象上进行同步的线程将是互斥的,在不同对象上锁定的线程将永远不会互斥。
具体可查看:http://lavasoft.blog.51cto.com/62575/99155/
0 0
- 方法锁和静态方法锁的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法 和 实例方法 的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法和实例方法的区别
- 静态方法和非静态方法的区别
- 静态方法和非静态方法的区别
- 静态方法和非静态方法的区别
- Java中静态方法和非静态方法的区别
- 静态方法和非静态方法的区别是什么
- java中静态方法和非静态方法的区别
- C#中静态方法和非静态方法的区别
- PHP静态方法和非静态方法的区别
- 如何表示一个算法(笔记)
- VirtualBox虚拟机网络设置
- iOS线程通信
- 104. Maximum Depth of Binary Tree
- 免费帮做网页设计,想要多实践一下,巩固自己的基础。
- 方法锁和静态方法锁的区别
- Mat类详解(三)
- 常见锁的区别及适用场景
- Riak - 背景篇(2)
- Xamarin安装信息
- 你真的会用Fragment了么?-Fragment解析
- c++ container
- Howto - Install MT7610U on CentOS 6.6
- 类型的萃取