java synchronized
来源:互联网 发布:单片机sd卡读写 编辑:程序博客网 时间:2024/06/10 03:55
同步类型
1 同步代码块
synchronized(obj){}
obj是一个对象的实例
一个线程A执行这个代码块时,其他线程(B,C,D)遇到被obj同步的代码块就阻塞,等待A解除占用后再执行,A可以在同步代码块中调用被obj同步的其他代码块内容。
2 同步函数
public synchronized void action(){}
方法同步时,同步锁对象是调用这个方法的对象
3 同步静态函数
4 同步类
Class Foo { public synchronized static void methodA() { } public void methodBBB() { synchronized(Foo.class) // class literal(类名称字面常量) }}
代码中的methodBBB()方法是把class literal作为锁的情况,它和同步的static函数产生的效果是一样的,取得的锁很特别,是当前调用这个方法的对象所属的类(Class,而不再是由这个Class产生的某个具体对象了)。
特殊注意
1 无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象
2 每个对象只有一个锁与之相关联。
3 实现同步要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
4 但当没有明确的对象作为锁,只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁:
class Foo implements Runnable
{
private byte[] lock = new byte[0]; // 特殊的instance变量
Public void methodA()
{
synchronized(lock) {
}
}
}
注:零长度的byte数组对象创建起来将比任何对象都经济――查看编译后的字节码:生成零长度的byte[]对象只需3条操作码,而Object lock = new Object()则需要7行操作码。
- Java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- Java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- java synchronized
- Java synchronized
- Java synchronized
- Java synchronized
- 删除和创建Oracle数据库中的DBLink
- MySql数据库新建表后,插入数据不成功的解决办法
- oracle 一些简单的笔记
- Maven系列学习(1)-maven入门
- 2.1 Displaying Alerts with UIAlertView
- java synchronized
- JNI 学习笔记
- 设计一个程序,用于赛车上的计算机监视系统
- .net 中 target属性的意思与作用
- 抓住无效性定价的机会,通过高胜率交易·战胜市场
- 第八周上机实践
- MySQL入门很简单--创建修改删除表
- 第8章 熵编码
- yum 出问题了