<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
		<meta name="apple-mobile-web-app-capable" content="yes">
		<meta name="apple-mobile-web-app-status-bar-style" content="black">
		<meta name="format-detection" content="telephone=no">
		<title>为什么ConcurrentHashMap的读操作不需要加锁？-思洋互动</title>
		<meta name="keywords" content="为什么ConcurrentHashMap的读操作不需要加锁？">
	    <meta name="description" content="我们知道，ConcurrentHashmap(1.8)这个并发调集结构是线程安全的，当你看到源码的get操作时，会发现get操作全程是没有加任何锁的，这也是这篇博文讨论的问题——为什么它不需要加锁呢？...">
		<meta name="renderer" content="webkit" />
		<link href="/css/main.css?v=39" rel="stylesheet">
		<link href="/css/base.css?v=39" rel="stylesheet">
        <link href="/css/swiper-3.4.2.min.css" rel="stylesheet">
		<script type="text/javascript" src="/js/jquery.min.js"></script>
        <script type="text/javascript" src="/js/swiper-3.4.2.min.js"></script>
		<!--[if lt IE 9]>
            <script src="/js/html5shiv.min.js"></script>
            <script src="/js/respond.min.js"></script>
            <link href="/css/ie.css" rel="stylesheet">
        <![endif]-->
		<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?8914d517c927d8e794148d05e387fb17";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
<link rel="canonical" href="https://www.ciya.cn/article/3740.html">
		</head>
	<body class="no-banner">
		<div class="container">
			<div class="header">
	<div class="header-top">
		<div class="w1700">
			<a href="https://www.ciya.cn/"><img src="/images/logo.png?v=2"></a>
		</div>
	</div>
	<div class="header_b">
		<header class="slide">
			<div id="navToggle" class="menu-handler">
				<span class="burger burger-1 trans"></span>
				<span class="burger burger-2 trans-fast"></span>
				<span class="burger burger-3 trans"></span>
			</div>
		</header>
	</div>
	<nav class="slide">
		<div class="w1700">
			<a class="index" href="/"></a>
			<ul>
								<li><a href="https://www.ciya.cn/case/12.html">项目案例</a></li>
								<li><a href="https://www.ciya.cn/website/9.html">网站建设</a></li>
								<li><a href="https://www.ciya.cn/marketing/10.html">网络营销</a></li>
								<li><a href="https://www.ciya.cn/media/11.html">新媒体</a></li>
								<li class="active"><a href="https://www.ciya.cn/news/16.html">动态</a></li>
								<li><a href="https://www.ciya.cn/about/8.html">关于</a></li>
								<li><a href="https://www.ciya.cn/contact/13.html">联系</a></li>
							</ul>
		</div>
	</nav>
</div>            <div class="content slide">
                <div class="position bgf1">
                    <div class="w1700">
                        <a href="https://www.ciya.cn/">首页 ></a>
                        <a href="https://www.ciya.cn/news/16.html">动态 ></a>
                        <a href="https://www.ciya.cn/news/35.html">网站知识</a>
                    </div>
                </div>
                <div class="case-type">
                    <div class="w1700">
                                                <a href="https://www.ciya.cn/news/32.html" >品牌合作</a>
                                                <a href="https://www.ciya.cn/news/31.html" >新闻动态</a>
                                                <a href="https://www.ciya.cn/news/38.html" >网站建设</a>
                                                <a href="https://www.ciya.cn/news/41.html" >网站制作</a>
                                                <a href="https://www.ciya.cn/news/40.html" >网站设计</a>
                                                <a href="https://www.ciya.cn/news/42.html" >运营推广</a>
                                                <a href="https://www.ciya.cn/news/35.html"  class="active">网站知识</a>
                                            </div>
                </div>
                <div class="padding-tb80">
                    <div class="w1700 clear">
                        <div class="fl xwxq-l">
                            <div class="noselettext">
                                <div class="xwxq-title mg-bt60 wow slideUp">
                                    <h1 class="mg-bt35">为什么ConcurrentHashMap的读操作不需要加锁？</h1>
                                    <span>时间：2023-05-17</span>
                                </div>
                                <div class="edit2 mg-bt60 wow slideUp">
                                                                        <p>我们知道，ConcurrentHashmap(1.8)这个并发调集结构是线程安全的，当你看到源码的get操作时，会发现get操作全程是没有加任何锁的，这也是这篇博文讨论的问题——为什么它不需要加锁呢？<br />
ConcurrentHashMap的简介<br />
我想有基础的同学知道在jdk1.7中是选用Segment+HashEntry+ReentrantLock的方式进行完成的，而1.8中抛弃了Segment臃肿的规划，取而代之的是选用Node+CAS+Synchronized来确保并发安全进行完成。<br />
JDK1.8的完成下降锁的粒度，JDK1.7版本锁的粒度是根据Segment的，包含多个HashEntry，而JDK1.8锁的粒度便是HashEntry（首节点）<br />
JDK1.8版本的数据结构变得愈加简略，使得操作也愈加明晰流畅，因为现已运用synchronized来进行同步，所以不需要分段锁的概念，也就不需要Segment这种数据结构了，因为粒度的下降，完成的复杂度也增加了<img class="aligncenter size-medium wp-image-5006" src="https://zzzjtd.com/wp-content/uploads/2019/08/222-300x211.jpg" alt="Java" width="300" height="211" /><br />
JDK1.8运用红黑树来优化链表，根据长度很长的链表的遍历是一个很漫长的进程，而红黑树的遍历效率是很快的，替代必定阈值的链表，这样构成一个最佳拍档<br />
img<br />
get操作源码<br />
首先计算hash值，定位到该table索引方位，假如是首节点契合就回来<br />
假如遇到扩容的时分，会调用标志正在扩容节点ForwardingNode的find方法，查找该节点，匹配就回来<br />
以上都不契合的话，就往下遍历节点，匹配就回来，否则最终就回来null<br />
//会发现源码中没有一处加了锁publicVget(Objectkey){<br />
Node[]tab;Nodee,p;intn,eh;Kek;inth=spread(key.hashCode());//计算hashif((tab=table)!=null&amp;&amp;(n=tab.length)&gt;0&amp;&amp;<br />
(e=tabAt(tab,(n-1)&amp;h))!=null){//读取首节点的Node元素if((eh=e.hash)==h){//假如该节点便是首节点就回来if((ek=e.key)==key||(ek!=null&amp;&amp;key.equals(ek)))returne.val;<br />
}//hash值为负值表示正在扩容，这个时分查的是ForwardingNode的find方法来定位到nextTable来//eh=-1，阐明该节点是一个ForwardingNode，正在搬迁，此刻调用ForwardingNode的find方法去nextTable里找。//eh=-2，阐明该节点是一个TreeBin，此刻调用TreeBin的find方法遍历红黑树，因为红黑树有或许正在旋转变色，所以find里会有读写锁。//eh&gt;=0，阐明该节点下挂的是一个链表，直接遍历该链表即可。elseif(eh&lt;0)return(p=e.find(h,key))!=null?p.val:null;while((e=e.next)!=null){//既不是首节点也不是ForwardingNode，那就往下遍历if(e.hash==h&amp;&amp;<br />
((ek=e.key)==key||(ek!=null&amp;&amp;key.equals(ek))))returne.val;<br />
}<br />
}returnnull;<br />
}<br />
get没有加锁的话，ConcurrentHashMap是如何确保读到的数据不是脏数据的呢？<br />
volatile登场<br />
关于可见性，Java供给了volatile关键字来确保可见性、有序性。但不确保原子性。<br />
一般的同享变量不能确保可见性，因为一般同享变量被修正之后，什么时分被写入主存是不确定的，当其他线程去读取时，此刻内存中或许仍是本来的旧值，因此无法确保可见性。<br />
volatile关键字关于根本类型的修正能够在随后对多个线程的读保持共同，但是关于引证类型如数组，实体bean，仅仅确保引证的可见性，但并不确保引证内容的可见性。。<br />
禁止进行指令重排序。<br />
布景：为了提高处理速度，处理器不直接和内存进行通讯，而是先将系统内存的数据读到内部缓存（L1，L2或其他）后再进行操作，但操作完不知道何时会写到内存。<br />
假如对声明了volatile的变量进行写操作，JVM就会向处理器发送一条指令，将这个变量地点缓存行的数据写回到系统内存。但是，就算写回到内存，假如其他处理器缓存的值仍是旧的，再履行计算操作就会有问题。<br />
在多处理器下，为了确保各个处理器的缓存是共同的，就会完成缓存共同性协议，当某个CPU在写数据时，假如发现操作的变量是同享变量，则会通知其他CPU告知该变量的缓存行是无效的，因此其他CPU在读取该变量时，发现其无效会从头从主存中加载数据。<br />
img<br />
总结下来：<br />
第一：运用volatile关键字会强制将修正的值立即写入主存；<br />
第二：运用volatile关键字的话，当线程2进行修正时，会导致线程1的作业内存中缓存变量的缓存行无效（反映到硬件层的话，便是CPU的L1或许L2缓存中对应的缓存行无效）；<br />
第三：因为线程1的作业内存中缓存变量的缓存行无效，所以线程1再次读取变量的值时会去主存读取。<br />
是加在数组上的volatile吗?<br />
/**<br />
*Thearrayofbins.Lazilyinitializeduponfirstinsertion.<br />
*Sizeisalwaysapoweroftwo.Accesseddirectlybyiterators.<br />
*/<br />
transientvolatileNode[]table;<br />
我们知道volatile能够润饰数组的，只是意思和它表面上看起来的姿态不同。举个栗子，volatileintarray[10]是指array的地址是volatile的而不是数组元素的值是volatile的.<br />
用volatile润饰的Node<br />
get操作能够无锁是因为Node的元素val和指针next是用volatile润饰的，在多线程环境下线程A修正结点的val或许新增节点的时分是对线程B可见的。<br />
staticclassNode&lt;K,V&gt;implementsMap.Entry&lt;K,V&gt;{finalinthash;finalKkey;//能够看到这些都用了volatile润饰volatileVval;volatileNodenext;<br />
Node(inthash,Kkey,Vval,Nodenext){this.hash=hash;this.key=key;this.val=val;this.next=next;<br />
}publicfinalKgetKey(){returnkey;}publicfinalVgetValue(){returnval;}publicfinalinthashCode(){returnkey.hashCode()^val.hashCode();}publicfinalStringtoString(){returnkey+&#8221;=&#8221;+val;}publicfinalVsetValue(Vvalue){thrownewUnsupportedOperationException();<br />
}publicfinalbooleanequals(Objecto){<br />
Objectk,v,u;Map.Entrye;return((oinstanceofMap.Entry)&amp;&amp;<br />
(k=(e=(Map.Entry)o).getKey())!=null&amp;&amp;<br />
(v=e.getValue())!=null&amp;&amp;<br />
(k==key||k.equals(key))&amp;&amp;<br />
(v==(u=val)||v.equals(u)));<br />
}/**<br />
*Virtualizedsupportformap.get();overriddeninsubclasses.<br />
*/Nodefind(inth,Objectk){<br />
Nodee=this;if(k!=null){do{<br />
Kek;if(e.hash==h&amp;&amp;<br />
((ek=e.key)==k||(ek!=null&amp;&amp;k.equals(ek))))returne;<br />
}while((e=e.next)!=null);<br />
}returnnull;<br />
}<br />
}<br />
既然volatile润饰数组对get操作没有作用那加在数组上的volatile的目的是什么呢？<br />
其实便是为了使得Node数组在扩容的时分对其他线程具有可见性而加的volatile<br />
总结<br />
在1.8中ConcurrentHashMap的get操作全程不需要加锁，这也是它比其他并发调集比如hashtable、用Collections.synchronizedMap()包装的hashmap;安全效率高的原因之一。<br />
get操作全程不需要加锁是因为Node的成员val是用volatile润饰的和数组用volatile润饰没有关系。<br />
数组用volatile润饰主要是确保在数组扩容的时分确保可见性。</p>


		
										                                </div>
                            </div>
                                                        <div class="wzbq wow slideUp mg-bt30">
                                <span>文章标签：</span>
                                <div class="bqnr">
                                                                                                             <a href="https://www.ciya.cn/tags/website-building/">网站建设</a>
                                                                                                                                                                                                                                                                                                                                                                    </div>
                            </div>
                                                        <div class="xwxq-bot bgf1 wow slideUp">
                                <div class="xwxq-fy clear">
                                    <a class="fl" href="/article/3741.html"><i></i>UV数据与风速风向数据转换</a>
                                    <a class="fr" href="/article/3739.html"><i></i>使用AOP进行权限验证 ​</a>
                                </div>
                                <a class="fhlb" href="#"></a>
                            </div>
                        </div>
                        <div class="fr xwxq-r">
                            <div class="xwxq-tj-page bgf1 mg-bt40 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title mg-bt30">
                                        <h3>最新案例</h3><span>LATEST CASES</span>
                                    </div>
                                    <div class="zxal">
                                        <div class="swiper-container">
                                            <div class="swiper-wrapper">
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/409.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214103120.jpg" alt="广州呼吸研究院"/></div>
                                                            <p>广州呼吸研究院</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/433.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102846.jpg" alt="融创集团"/></div>
                                                            <p>融创集团</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/268.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102923.jpg" alt="粤海集团"/></div>
                                                            <p>粤海集团</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/414.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211216/20211216115258.jpg" alt="恒大足球学校"/></div>
                                                            <p>恒大足球学校</p>
                                                        </a>
                                                    </div>
                                                                                                        <div class="imgscale li swiper-slide">
                                                        <a href="https://www.ciya.cn/article/477.html">
                                                            <div class="img100 mg-bt20"><img src="/upload/20211214/20211214102958.jpg" alt="侨鑫集团"/></div>
                                                            <p>侨鑫集团</p>
                                                        </a>
                                                    </div>
                                                                                                </div>
                                        </div>
                                        <div class="zxalDot text-center swiperDot"></div>
                                    </div>
                                </div>
                            </div>
                            <div class="xwxq-tj-page bgf1 mg-bt40 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title tjxw-title-line mg-bt20">
                                        <h3>热点新闻</h3><span>TOP NEWS</span>
                                    </div>
                                    <ul class="rdxw">
                                                                                <li><a href="https://www.ciya.cn/article/3559.html">1  java heap space(解决方法)</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1222.html">2  如何在网站后台上传附件</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1643.html">3  如何在网站后台上传PDF文件</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/1142.html">4  什么是流？</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/3543.html">5  java swing还有人用吗(swing为什么会被淘汰)</a></li>
                                                                            </ul>
                                </div>
                            </div>
                            <div class="xwxq-tj-page bgf1 wow slideUp">
                                <div class="xwxq-tj-warp bgfff">
                                    <div class="tjxw-title tjxw-title-line mg-bt20">
                                        <h3>最新动态</h3><span>NEWS</span>
                                    </div>
                                    <ul class="rdxw">
                                                                                <li><a href="https://www.ciya.cn/article/7318.html">1  商务网站的维护与更新：持续优化，保持竞争力</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7317.html">2  商务网站的社交媒体营销：扩大品牌影响力，吸引更多潜在客户</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7316.html">3  商务网站的广告投放：增加收益，提高知名度</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7315.html">4  商务网站的在线客户服务：提供优质客服，提升用户满意度</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7314.html">5  商务网站的支付系统集成：安全、便捷的交易方式</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7313.html">6  商务网站搜索引擎优化（SEO）：提升排名，增加流量</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7312.html">7  商务网站响应式设计：实现多设备兼容，提升用户体验</a></li>
                                                                                <li><a href="https://www.ciya.cn/article/7311.html">8  商务网站开发：选择合适的编程语言和技术栈</a></li>
                                                                            </ul>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="footerbox">
	<div class="footer">
		<div class="w1700">
			<ul>
				<li>
					<span class="fttitle">思洋 · 广州总部</span>
					<div>
						<p>广州天河区珠江新城富力盈力大厦北塔2706</p>
						<p>020-38013166（网站咨询专线）</p>
					</div>
					<p>400-001-5281 （售后服务热线）</p>
				</li>
				<li>
					<span class="fttitle">思洋 · 深圳</span>
					<div>
						<p>深圳市坂田十二橡树庄园F1-7栋</p>
						<p>Site/ http://www.szciya.com </p>
						<p>E-mail/ itciya@vip.163.com</p>
					</div>
					<p>品牌服务专线：400-001-5281 </p>
				</li>
				<li>
					<span class="fttitle">思洋 · 湖南</span>
					<div>
						<p>长沙市天心区芙蓉中路三段398号新时空大厦5楼</p>
						<p>联系电话/ (+86 0731)88282200</p>
					</div>
					<p>品牌服务专线/ 400-966-8830</p>
				</li>
				<li class="lastli">
					<p class="mt10">旗下运营网站：</p>
					<div class="mt10">
						<img src="/images/ftlogo2.png">
						<img src="/images/gogo.png">
						<img src="/images/ftlogo3.png">
						<img src="/images/ftlogo4.png">
						<img src="/images/ftlogo11.png">
					</div>
				</li>
			</ul>
		</div>
	</div>
	<div class="ft_bottom">
		<div class="w1700">
			<p class="cop">Copyright © 2016 广州思洋文化传播有限公司，保留所有权利。 <a href="https://beian.miit.gov.cn/" target="_blank">粤ICP备09033321号</a>
			</p>
		</div>
	</div>
</div>
<div class="le-box active">
	<div class="t show780">
		<a href="tel:13570966600">
			<img src="/images/ml9-1.png?v=1" alt="" class="sow i">
			<img src="/images/ml9-1.png?v=1" alt="" class="iove i">
		</a>
	</div>
	<div class="t">
		<img src="/images/ml1-1.png?v=1" alt="" class="sow i">
		<img src="/images/ml1-1.png?v=1" alt="" class="iove i">
		<div class="iov">
			<div class="img">
				<img src="/images/qr.jpg" alt="与项目经理交流">
			</div>
			<div class="h">扫描二维码<br>与项目经理交流</div>
		</div>
	</div>
	<div class="t">
		<img src="/images/ml2-1.png?v=1" alt="" class="sow i">
		<img src="/images/ml2-1.png?v=1" alt="" class="iove i">
		<div class="iov">
			<div class="img">
				<img src="/images/qq001.jpg" alt="">
			</div>
			<div class="h">扫描二维码<br>与项目经理交流</div>
		</div>
	</div>
	<!--<div class="t">-->
		<!--<a href="http://wpa.qq.com/msgrd?v=3&amp;uin=1607245872&amp;site=ciya.cn&amp;menu=yes" target="_blank">-->
			<!--<img src="/images/ml2-1.png?v=1" alt="" class="sow i">-->
			<!--<img src="/images/ml2-1.png?v=1" alt="" class="iove i">-->
		<!--</a>-->
	<!--</div>-->
	<div class="t hide780">
		<a href="https://affim.baidu.com/unique_510425/chat?siteId=19536215&userId=510425&siteToken=8914d517c927d8e794148d05e387fb17" target="_blank">
			<img src="/images/ml3-1.png?v=1" alt="" class="sow i">
			<img src="/images/ml3-1.png?v=1" alt="" class="iove i">
		</a>
	</div>
</div>
<script>
	$(window).scroll(function(){
//		if($(window).scrollTop()>200){
//			$(".le-box").addClass("active");
//		}else{
//			$(".le-box").removeClass("active");
//		}
	})
</script>
<div class="wap_fx">
	<a href="tel:13570966600" class="phone"></a>
	<a href="mqqwpa://im/chat?chat_type=wpa&uin=1607245872&version=1&src_type=web&web_src=ciya.cn" target="_blank" class="qq"></a>
	<a href="javascript:;" class="wx2"></a>
	<a class="kef986" style="background:rgba(0,0,0,.6) url(/images/ml3-1.png?v=1) no-repeat center;background-size: cover;border-radius: 4px;" href="https://p.qiao.baidu.com/cps/chat?siteId=18513940&userId=510425&siteToken=e5e1bde478969b43bf99b7703a694c0b" target="_blank"></a>
</div>
<div class="wap-wxcode">
	<div class="middle-box">
		<div class="middle-inner">
			<div class="wap-wxcode-con">
				<img src="/images/ff_ewm.jpg" alt=""/>
				<div class="wap-wxcode-bot"><span class="wxname">ciya68</span><button class="copy-btn" data-clipboard-text="ciya68">点击复制</button></div>
				<div class="gb1002"></div>
			</div>
		</div>
	</div>
</div>
<input id="hide" type="hidden">
<script src="/js/clipboard.min.js"></script>
<script>
	$(function(){
		$(".wx2").click(function(){
			$(".wap-wxcode").show();
		});
		$(".gb1002").click(function(){
			$(".wap-wxcode").hide();
		});
		var copyBtn=new ClipboardJS('.copy-btn');
		copyBtn.on("success",function(e){
			// 复制成功
			// alert(e.text);
			showMessage('已成功复制微信号','success',2000)
			e.clearSelection();
		});
		copyBtn.on("error",function(e){
			//复制失败；
			showMessage('复制微信号失败','error',2000)
			console.log( e.action )
		});
		function showMessage(message,type,time) {
			let str = ''
			switch (type) {
				case 'success':
					str = '<div class="success-message" style="width: 100%;height: 50px;background-color: #030026;font-size:17px;text-align: center;color:#fff;position: fixed;left: 0%;bottom: 0%;line-height: 50px;z-index: 9999">\n' +
							'    <span class="mes-text">'+message+'</span></div>'
					break;
				case 'error':
					str = '<div class="error-message" style="width: 100%;height: 50px;background-color: #030026;font-size:17px;text-align: center;color: #fff;position: fixed;left: 0%;bottom: 0%;line-height: 50px;z-index: 9999">\n' +
							'    <span class="mes-text">'+message+'</span></div>'
			}
			$('body').append(str)
			setTimeout(function () {
				$('.'+type+'-message').remove()
			},time)
		}


		var ua = navigator.userAgent.toLowerCase();
		var isWeixin = ua.indexOf('micromessenger')!= -1;
		if(isWeixin){
			$(".kef986").hide();
		}

	})
</script>
            </div>
        </div>
		<script type="text/javascript" src="/js/trunk.js?v=2"></script>
        <script>
            var zxal=null;
            var len=$(".zxal .swiper-slide").length;
            if(len>1){
                zxal = new Swiper('.zxal .swiper-container',{
                    speed:600,
                    loop:true,
                    autoplay : 5000,
                    autoplayDisableOnInteraction : false,
                    pagination : '.zxalDot',
                    paginationClickable :true,
                })
            }else{
                $(".zxalDot").hide();
            }
        </script>
	</body>
</html>

