摆渡人,外婆桥!
----只要路选对了,就不怕有多远!
同步(synchronized)对程序性能的影响!
在使用多线程时,可能会访问一些全局的数据,这时必然会使用同步机制来使程序按照一定顺序来执行,这样程序的性能也会下降。所以一定要慎用同步,正确用同步。看下面的程序
int
curIndex
=
0
;
AuditQueueEntry aqe;
synchronized
(localCriticalSection)
{
while
(curIndex
<
theList.size())
{
aqe
=
(AuditQueueEntry) theList.get(curIndex);
if
(aqe.getTrailId()
==
theTrailId)
{
theList.remove(curIndex);
}
else
{
curIndex
++
;
}
}
}
localCriticalSection做为一个信号量来控制程序对类成员变量theList的访问,从而保证了theList在同一时间只有一个程序访问。运行程序,这个函数花费了将近4秒钟。同步是很耗时间的。
在java.util.Collections中提供了很多方法来保证集合(数组)的同步访问。
我们修改类成员变量theList的实例化方法:
theList
=
Collections.synchronizedList(new LinkedList());
再修改处理函数:
int
curIndex
=
0
;
AuditQueueEntry aqe;
//
synchronized (localCriticalSection) {
synchronized
(theList)
{
while
(curIndex
<
theList.size())
{
aqe
=
(AuditQueueEntry) theList.get(curIndex);
if
(aqe.getTrailId()
==
theTrailId)
{
theList.remove(curIndex);
}
else
{
curIndex
++
;
}
}
}
再运行,这个函数才花费将近一秒钟的时间!
在Collections中提供了很多这类的方法。
发表于 2006-11-10 12:37
swingboat
阅读(1329)
评论(2)
编辑
收藏
所属分类:
JAVA
评论
#
re: 同步(synchronized)对程序性能的影响!
但这里有个问题:
当两个线程A和B同时访问此函数的时候,假设theList.site()为5.优先级高的线程A首先访问访问此函数.线程A删除了一个元素,假设当前索引为2.线程B开始访问此函数,而开始删除索引为2的元素.由于索引2的元素已经被线程A删除了,所以线程B开始访问的删除的时候,会抛出空指针的异常.
#
re: 同步(synchronized)对程序性能的影响!
其实你的问题,与线程是没有关系的。只不过在删除的时候需要去检查下需要删除的对象是否在数组中存在。
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
利用JGroups同步两台server之间的cache。
有关“+”和“_”的search。
synchronized的作用
不同时区之间,时间的转换?
maven2使用问题集(命令篇)!
同步(synchronized)对程序性能的影响!
Tomcat5.5.x的JNDI配置(jakarta-tomcat-5.5.7)。
AXIS学习(1)
获取classes目录下的资源文件和类所在目录下的资源文件?
实现类clone方法
<
2006年11月
>
日
一
二
三
四
五
六
29
30
31
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
1
2
3
4
5
6
7
8
9
公告
导航
BlogJava
首页
发新随笔
发新文章
联系
聚合
管理
统计
随笔: 51
文章: 1
评论: 50
引用: 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
JAVA(21)
(rss)
javascript&DHTML&CSS(15)
(rss)
Oracle/MySQL(6)
(rss)
SOA(1)
(rss)
WEB2.0(4)
(rss)
WorkFlow&BPEL(1)
(rss)
名词概念(1)
(rss)
架构模式
(rss)
汽车&甲壳虫
(rss)
设计模式(3)
(rss)
软件工程(1)
(rss)
随笔档案
2007年9月 (1)
2007年8月 (3)
2007年7月 (1)
2007年5月 (2)
2007年4月 (4)
2007年3月 (1)
2007年2月 (1)
2006年12月 (1)
2006年11月 (2)
2006年10月 (1)
2006年8月 (1)
2006年4月 (1)
2006年3月 (2)
2006年2月 (4)
2005年12月 (26)
文章档案
2006年1月 (1)
IT
Delver 's Study BLOG
竹笋炒肉
搜索
积分与排名
积分 - 132416
排名 - 465
最新随笔
1. IE对select的处理,又一怪现象:innerHTML竟然不起作用。
2. 在IE下,页面只有一个text的时候,回车将自动submit。
3. 设置input的内容居中?
4. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?
5. 利用JGroups同步两台server之间的cache。
6. 有关“+”和“_”的search。
7. synchronized的作用
8. HTML的特殊字符
9. 不同时区之间,时间的转换?
10. javascript在IE和Firefox中的区别1
最新评论
1. re: javascript转换日期字符串为Date对象
大牛
--sfafa
2. re: synchronized的作用[未登录]
把100换成1000就好了!
--xyz
3. re: synchronized的作用
晦涩难懂!
--无知者
4. re: synchronized的作用
好
--白河夜歌
5. re: 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?
评论内容较长,点击标题查看
--老梁
阅读排行榜
1. javascript转换日期字符串为Date对象(47697)
2. synchronized的作用(16385)
3. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?(11067)
4. 不同时区之间,时间的转换?(7436)
5. 利用JGroups同步两台server之间的cache。(6591)
评论排行榜
1. synchronized的作用(18)
2. 可恶的“本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容”对话框?(7)
3. javascript在IE和Firefox中的区别1(6)
4. javascript转换日期字符串为Date对象(4)
5. 在IE下,页面只有一个text的时候,回车将自动submit。(3)