在Java中,synchronized关键字为防止资源冲突提供了支持,其作用域有二种:
-
实例范围。
对象实例范围内synchronized使用的两种形式:
实例范围同步方法
publicd class syncTest {
…
synchronized void aMethod() {
//需要同步使用的代码
}
}
|
synchronized aMethod(){}可以防止多个线程同时访问这个对象实例的synchronized方法(如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法)。这时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法。
实例范围同步区块
publicd class syncTest {
…
void aMethod() {
//无需同步使用的代码
…
synchronized(this) {
//需要同步使用的代码块
}
}
}
|
除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象。
-
类范围
同样地,在类范围内使用synchronized也有同步方法和同步区块两种形式:
类范围同步方法
publicd class syncTest {
…
synchronized static void aMethod() {
//需要在类范围同步使用的代码
}
}
|
synchronized static aStaticMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。也就是说在一个JVM中,同一时间最多有一个该类的静态同步方法在执行。这样的方法可以应用到多线程的同步中,实现各线程直接的数据共享和互动。
类范围同步区块
publicd class syncTest {
…
static void aMethod() {
…
//无需同步使用的代码
synchronized (syncTest.class) {
//需要在类范围同步使用的代码
}
}
}
|
类范围同步区块功能与类范围同步方法相同,只是对一个区块的代码的同步。用法是:在static 方法内加同步区块:sychronized (类名.class) { /*区块*/}。
-
注意事项
synchronized关键字是不能继承的
synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;
关于加锁
对共享资源的同步访问更加安全的技巧
如果instance变量是一个对象,如数组或ArrayList什么的,那上述方法仍然不安全,因为当外界对象通过get方法拿到这个instance对象的引用后,又将其指向另一个对象,那么这个private变量也就变了,这样是非常危险的。 这个时候就需要将get方法也加上synchronized同步,并且,只返回这个private对象的clone()。这样,调用端得到的就是对象副本的引用了。
原文地址:http://www.cnblogs.com/leizhilong/archive/2008/04/01/1133728.html
相关推荐
里面包含了Hex文件的合并移机Hex文件转Bin文件,本来打算Bin转Hex也块做的,基于下面两个原因,没有做: 1、bin转hex功能暂时我没用到,而且也应该不会用到 2、bin转hex牵涉到一个起始地址问题,bin文件全是数据,不...
48V 转 24V,48V 转 20V,48V 转 9V,48V 转 5V,48V 转 3.3V,48V 转 3V,48V 转 1.8V,48V 转 24V 降压降压芯片,48V 转 20V 降压降压芯片,48V 转 9V 降压降压芯 片,48V 转 5V 降压降压芯片,48V 转 3.3V 降压...
48V转24V,48V转20V,48V转9V,48V转5V,48V转3.3V,48V转3V,48V转1.8V,48V转24V降压降压芯片,48V转20V降压降压芯片,48V转9V降压降压芯片,48V转5V降压降压芯片,48V转3.3V降压降压芯片,48V转3V降压降压芯片,...
PECL转TTL TTL转PECL 电平转换传输芯片,是一款集成的电平转换芯片
vcf转csv转excel步骤: 导出手机vcf文件 - VCF2CSV读取vcf转为csv表格 - 打开excel\数据\导入外部数据(所有字优选文本类型) - 存中excel文件。 excel转csv转vcf步骤: excel文件 - 另存为csv表格 - VCF2CSV读取csv...
采用C#开发语言,借助第三方Aspose.Pdf.dll及Spire.Pdf.dll 对pdf文件进行处理,可以把pdf文件转换成doc 或者docx png等格式,通过代码大家可以进行自己重新开发,核心代码已经编写完成,下载后可以直接运行进行pdf...
obj转osgb fbx转osgb dae转osgb
osgb格式转obj osg转osgb osgb转ive ive转obj 互转工具
仿58转转咸鱼源码,有文字教程,搭建简单
转转大师PDF转换成Word转换器软件是一款功能强大好用的pdf文件转换成word文件的软件,界面简单,功能稳定,支持批量转换,操作起来非常方便,完美支持将pdf文档转成word文档。 软件特色: 1.转转大师PDF转换成WORD...
将文件下载后放在Eclipse安装目录下plugins后重启Eclipse。双击选中要转换的字符按快捷键Ctrl+Shift+Z,插件转换规则依次是: 下划线(小写) > 驼峰(首字母大写) > 驼峰(首字母小写) > 下划线(大写) > 下划线(小写)>....
软件介绍: 本工具用于解决不同编程器之间数据转换问题,可将HEX文件转换到BIN,或者将BIN转换到HEX。注意:BIN文件是编程器兼容最好的数据格式,如有HEX软件数据转换保存后的BIN软件数据为0 KB,则源数据本身是...
改用原始图像数据流回调函数RegisterImageStreamCallback进行抓图 但回调函数帧为YUV420格式 需要转成Bitmap才用用于显示及本地查看 在网上找了好多都是基于R Y+1 4075 V 128 G Y 0 3455 U 128 – 0 7169 V 128 B Y+...
前阵子要把.264的文件转成AVI格式,在网上找了N多个软件,都无法实现。在CSDN上也下了多个,分倒是扣了不少,但也是无法使用。今天在另一个网站上花10个点总算找到了一个能转.264监控文件的播放器和转换器,而且转换...
环境:vc6 基于对话框,在CEDIT框中实现进制间转换,也就是实现转换并且显示到CEDIT控件上。 已实现的功能:二进制与十六进制字符串之间的转换。 未实现的功能:二进制与ASCII、十六进制与ASCII字符串之间的转换。...
全部黑字体,去掉背景,去除超链接,清除制表符,删除隐藏文字,替换""成“”,图片全设为嵌入型,首行缩进2,去段中不分页部份,转项目编号到文字,删除非嵌入型图片,清除换行带的下划线格式,去掉页脚页媚,Word转html,Word转...
网上传的postgreSQL汉字转拼音的方法,是针对9.3的版本(相信你要是8.4的也搜到了但不能直接用,才来看我的),尝试了8.4的版本来做拼音处理。发现网上的《postgreSQL汉字转拼音》里面坑比较多,尝试纠正了一下,发...
java汉字转拼音,android汉字转拼音,汉字转拼音首字母,汉字转ASCII
Cadence转Altium Designe allegro .brd文件转成AD .pcbdoc文件 1、将.brd文件生成.alg文件 2、使用AD导入向导将.alg文件生成 .pcbdoc文件 由于PCB工程师或者硬件工程师使用的软件不同,经常需要在各种PCB绘制软件...