...
...
...
}
òq¸è¿çš„æ˜¯˜q™é‡Œæœ‰ä¸€ä¸ªUnsafeçš„å˜é‡å¯ä»¥è¢«ç”¨æ¥å–å¾—Unsafe的实例。我们å¯ä»¥è½»æ‘Öœ°¾~–写一个å¤åˆ¶æ–¹æ³•通过åå°„æ¥å®žçŽŽÍ¼Œå¦‚下所½Cºï¼š(x¨¬)
åQ?a target="_blank" rel="nofollow">http://highlyscalable.wordpress.com/2012/02/02/direct-memory-access-in-java/åQ?/div>
public
static
Unsafe getUnsafe() {
try
{
Field f = Unsafe.
class
.getDeclaredField(
"theUnsafe"
);
f.setAccessible(
true
);
return
(Unsafe)f.get(
null
);
}
catch
(Exception e) {
/* ... */
}
}
Unsafe一些有用的ç‰ÒŽ(gu¨©)€?/strong>
- 虚拟æœ?#8220;集约åŒ?#8221;åQˆVM intrinsificationåQ‰ï¼š(x¨¬)å¦‚ç”¨äºŽæ— é”Hash表ä¸çš„CASåQˆæ¯”较和交æ¢åQ‰ã€‚冿¯”如compareAndSwapInt˜q™ä¸ªæ–ÒŽ(gu¨©)³•用JNI调用åQŒåŒ…å«äº†(ji¨£n)对CAS有特ŒDŠå¼•导的本地代ç 。在˜q™é‡Œä½ 能è¯Õdˆ°æ›´å¤šå…³äºŽCAS的信æ¯ï¼š(x¨¬)http://en.wikipedia.org/wiki/Compare-and-swapã€?/li>
- ä¸ÀLœºè™šæ‹Ÿæœºï¼ˆè¯‘注åQšä¸»æœø™™šæ‹Ÿæœºä¸»è¦ç”¨æ¥½Ž¡ç†å…¶ä»–虚拟机。而虚拟åã^å°æˆ‘ä»¬çœ‹åˆ°åªæœ‰guest VMåQ‰çš„sun.misc.Unsafe功能能够被用于未åˆå§‹åŒ–的对象分é…内å˜åQˆç”¨allocateInstanceæ–ÒŽ(gu¨©)³•åQ‰ï¼Œç„¶åŽž®†æž„é€ å™¨è°ƒç”¨è§£é‡Šä¸ºå…¶ä»–æ–¹æ³•çš„è°ƒç”¨ã€?/li>
- ä½ å¯ä»¥ä»Žæœ¬åœ°å†…å˜åœ°å€ä¸è¿½ítªåˆ°˜q™äº›æ•°æ®ã€‚ä‹Éç”?span style="color: #993300;">java.lang.Unsafe¾c»èŽ·å–内å˜åœ°å€æ˜¯å¯èƒ½çš„。而且å¯ä»¥é€šè¿‡unsafeæ–ÒŽ(gu¨©)³•直接æ“作˜q™äº›å˜é‡åQ?/li>
- 使用allocateMemoryæ–ÒŽ(gu¨©)³•åQŒå†…å˜å¯ä»¥è¢«åˆ†é…åˆ°å †å¤–ã€‚ä¾‹å¦‚å½“allocateDirectæ–ÒŽ(gu¨©)³•被调用时DirectByteBufferæž„é€ å™¨å†…éƒ¨ä¼?x¨¬)ä‹Éç?span style="color: #993300;">allocateMemoryã€?/li>
- arrayBaseOffsetå’?span style="color: #993300;">arrayIndexScaleæ–ÒŽ(gu¨©)³•å¯ä»¥è¢«ç”¨äºŽå¼€å‘arrayletsåQŒä¸€¿U用æ¥å°†å¤§æ•°¾l„åˆ†è§£äØ“(f¨´)ž®å¯¹è±¡ã€é™åˆ¶æ‰«æçš„å®žæ—¶æ¶ˆè€—æˆ–è€…åœ¨å¤§å¯¹è±¡ä¸Šåšæ›´æ–°å’Œ¿UÕdЍã€?/li>
Unsafe.java是jdkòq¶å‘¾cÕdº“java.util.concurrent包ä¸ä½¿ç”¨çš„底层类åQŒè¯¥¾cÖM¸çš„æ–¹æ³•都是通过nativeæ–ÒŽ(gu¨©)³•调用æ“作¾pÈ»Ÿå‘½ä×o(h¨´)ã€?/p>
在多¾U¿ç¨‹çŽ¯å¢ƒä¸‹ï¼Œä¸»è¦å˜åœ¨ä¸¤ç§ç‰ÒŽ(gu¨©)®Šçš„场景:(x¨¬)
1åQ›å¤šä¸ªçº¿½E‹åŒæ—¶è®¿é—®æŸä¸ªå¯¹è±¡çš„æ–ÒŽ(gu¨©)³•åQŒç”±äºŽæ“作系¾lŸå¯¹¾U¿ç¨‹è°ƒåº¦çš„丼‹®å®šæ€§ï¼Œå˜åœ¨ä½¿è¯¥å¯¹è±¡çš„状æ€å¤„于ä¸ä¸€è‡´çš„状æ€ï¼Œä¸ÞZº†(ji¨£n)é¿å…˜q™ç§æƒ…况的å‘生,我们å¯ä»¥å£°æ˜Žè¯¥æ–¹æ³•䨓(f¨´)åŒæ¥æ–ÒŽ(gu¨©)³•åQˆsynchronizedåQ‰ã€‚ä¿è¯æŸä¸€æ—¶åˆ»åªæœ‰ä¸€ä¸ªçº¿½E‹è°ƒç”¨è¯¥æ–ÒŽ(gu¨©)³•åQŒå…¶å®ƒè°ƒç”¨çº¿½E‹åˆ™è¢«é˜»å¡žã€‚è¿™¿U方法在òq¶å‘性很高的情况下会(x¨¬)产生大é‡çš„线½E‹è°ƒåº¦å¼€é”€ã€‚从而媄(ji¨£ng)å“程åºçš„òq¶å‘性能。在java.util.concurrent包ä¸é€šè¿‡ä½¿ç”¨éžé˜»å¡žåŽŸåæ–¹æ³•,å‡å°‘æ“作¾pÈ»Ÿçš„æ— 用线½E‹è°ƒåº¦å¼€é”€åQŒä»Žè€Œæé«˜åÆˆå‘æ€§èƒ½ã€?/p>
2åQ›å¤š¾U¿ç¨‹é€šè¿‡æŸä¸ªå¯¹è±¡˜q›è¡Œé€šä¿¡åQŒå³å¸¸è§çš„生产者消费者模型。在以å‰çš„jdkç‰ˆæœ¬ä¸æ˜¯é€šè¿‡wait,notifyæ–ÒŽ(gu¨©)³•实现的。该æ–ÒŽ(gu¨©)³•也是通过底层在æŸä¸ªä¿¡å·é‡ä¸Šçš„é˜Õd¡žé˜Ÿåˆ—实现的。而Unsafe¾cÖM¸ç›´æŽ¥æä¾›æ“作¾pÈ»Ÿè°ƒåº¦å‘½ä×o(h¨´)park,unpark,å‡å°‘ä¿¡å·é‡çš„开销åQŒæé«˜æ–°èƒ½ã€?/p>
从上é¢å¯ä»¥çœ‹å‡ºï¼ŒUnsafe¾cÀL˜¯é€šè¿‡æä¾›åº•层的æ“作系¾lŸå‘½ä»¤æŽ¥å£ç»™å¼€å‘者,从而æä¾›ç¨‹åºçš„æ€§èƒ½ã€?/p>

]]>- javaòq¶å‘库之Executors常用的创建ExecutorServiceçš„å‡ ä¸ªæ–¹æ³•è¯´æ˜?/title><link>http://www.aygfsteel.com/stevenjohn/archive/2015/01/21/422344.html</link><dc:creator>abin</dc:creator><author>abin</author><pubDate>Wed, 21 Jan 2015 14:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/stevenjohn/archive/2015/01/21/422344.html</guid><wfw:comment>http://www.aygfsteel.com/stevenjohn/comments/422344.html</wfw:comment><comments>http://www.aygfsteel.com/stevenjohn/archive/2015/01/21/422344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/stevenjohn/comments/commentRss/422344.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/stevenjohn/services/trackbacks/422344.html</trackback:ping><description><![CDATA[<p><strong>一ã€çº¿½E‹æ± 的创å»?/strong> </p><p> 我们å¯ä»¥é€šè¿‡ThreadPoolExecutoræ¥åˆ›å»ÞZ¸€ä¸ªçº¿½E‹æ± ã€?br /></p><pre>new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler);</pre><p>创å¾ä¸€ä¸ªçº¿½E‹æ± 需è¦è¾“å…¥å‡ ä¸ªå‚æ•ŽÍ¼š(x¨¬) </p><ul><li>corePoolSizeåQˆçº¿½E‹æ± 的基本大ž®ï¼‰(j¨ª)åQšå½“æäº¤ä¸€ä¸ªä“Q务到¾U¿ç¨‹æ± æ—¶åQŒçº¿½E‹æ± ä¼?x¨¬)创å»ÞZ¸€ä¸ªçº¿½E‹æ¥æ‰§è¡Œä»ÕdŠ¡åQŒå³ä½¿å…¶ä»–空闲的基本¾U¿ç¨‹èƒ½å¤Ÿæ‰§è¡Œæ–îC“Q务也ä¼?x¨¬)创建线½E‹ï¼Œ½{‰åˆ°éœ€è¦æ‰§è¡Œçš„ä»ÕdŠ¡æ•°å¤§äºŽçº¿½E‹æ± åŸºæœ¬å¤§å°æ—¶å°±ä¸å†åˆ›å¾ã€‚如果调用了(ji¨£n)¾U¿ç¨‹æ± çš„prestartAllCoreThreadsæ–ÒŽ(gu¨©)³•åQŒçº¿½E‹æ± ä¼?x¨¬)æå‰åˆ›å»ºåƈå¯åŠ¨æ‰€æœ‰åŸºæœ¬çº¿½E‹ã€?</li><li>runnableTaskQueueåQˆä“Q务队列)(j¨ª)åQšç”¨äºŽä¿å˜ç‰å¾…执行的ä»ÕdŠ¡çš„é˜»å¡žé˜Ÿåˆ—ã€?å¯ä»¥é€‰æ‹©ä»¥ä¸‹å‡ 个é˜Õd¡žé˜Ÿåˆ—ã€? <ul><li>ArrayBlockingQueueåQšæ˜¯ä¸€ä¸ªåŸºäºŽæ•°¾l„结构的有界é˜Õd¡žé˜Ÿåˆ—åQŒæ¤é˜Ÿåˆ—æŒ?FIFOåQˆå…ˆ˜q›å…ˆå‡ºï¼‰(j¨ª)åŽŸåˆ™å¯¹å…ƒç´ è¿›è¡ŒæŽ’åºã€?</li><li>LinkedBlockingQueueåQšä¸€ä¸ªåŸºäºŽé“¾è¡¨ç»“构的é˜Õd¡žé˜Ÿåˆ—åQŒæ¤é˜Ÿåˆ—按FIFO åQˆå…ˆ˜q›å…ˆå‡ºï¼‰(j¨ª) 排åºå…ƒç´ åQŒåžåé‡é€šå¸¸è¦é«˜äºŽArrayBlockingQueue。é™(r¨´n)æ€å·¥åŽ‚æ–¹æ³•Executors.newFixedThreadPool()使用äº?ji¨£n)这个队列ã€?</li><li>SynchronousQueueåQšä¸€ä¸ªä¸å˜å‚¨å…ƒç´ 的阻塞队列。æ¯ä¸ªæ’å…¥æ“作必™åȉ到å¦ä¸€ä¸ªçº¿½E‹è°ƒç”¨ç§»é™¤æ“作,å¦åˆ™æ’å…¥æ“作一直处于阻塞状æ€ï¼Œåžåé‡é€šå¸¸è¦é«˜äºŽLinkedBlockingQueueåQŒé™(r¨´n)æ€å·¥åŽ‚æ–¹æ³•Executors.newCachedThreadPool使用äº?ji¨£n)这个队列ã€?</li><li>PriorityBlockingQueueåQšä¸€ä¸ªå…·æœ‰ä¼˜å…ˆçñ”çš„æ— é™é˜»å¡žé˜Ÿåˆ—ã€?</li></ul></li><li>maximumPoolSizeåQˆçº¿½E‹æ± 最大大ž®ï¼‰(j¨ª)åQšçº¿½E‹æ± å…许创å¾çš„æœ€å¤§çº¿½E‹æ•°ã€‚如果队列满äº?ji¨£n),òq¶ä¸”已创建的¾U¿ç¨‹æ•°å°äºŽæœ€å¤§çº¿½E‹æ•°åQŒåˆ™¾U¿ç¨‹æ± 会(x¨¬)å†åˆ›å»ºæ–°çš„线½E‹æ‰§è¡Œä“Q务。值得注æ„的是如果使用äº?ji¨£n)æ— ç•Œçš„ä»ÕdŠ¡é˜Ÿåˆ—˜q™ä¸ªå‚æ•°ž®±æ²¡ä»€ä¹ˆæ•ˆæžœã€?</li><li>ThreadFactoryåQšç”¨äºŽè®¾¾|®åˆ›å»ºçº¿½E‹çš„工厂åQŒå¯ä»¥é€šè¿‡¾U¿ç¨‹å·¥åŽ‚¾l™æ¯ä¸ªåˆ›å»ºå‡ºæ¥çš„¾U¿ç¨‹è®„¡½®æ›´æœ‰æ„义的åå—ã€?</li><li>RejectedExecutionHandleråQˆé¥±å’Œç–略)(j¨ª)åQšå½“队列和线½E‹æ± 都满äº?ji¨£n),说明¾U¿ç¨‹æ± 处于饱和状æ€ï¼Œé‚£ä¹ˆå¿…须采å–一¿Uç–ç•¥å¤„ç†æäº¤çš„æ–îC“Q务。这个ç–略默认情况下是AbortPolicyåQŒè¡¨½Cºæ— æ³•å¤„ç†æ–°ä»ÕdŠ¡æ—¶æŠ›å‡ºå¼‚å¸¸ã€‚ä»¥ä¸‹æ˜¯JDK1.5æä¾›çš„å››¿Uç–ç•¥ã€? <ul><li>AbortPolicyåQšç›´æŽ¥æŠ›å‡ºå¼‚常ã€?</li><li>CallerRunsPolicyåQšåªç”¨è°ƒç”¨è€…所在线½E‹æ¥˜q行ä»ÕdŠ¡ã€?</li><li>DiscardOldestPolicyåQšä¸¢å¼ƒé˜Ÿåˆ—里最˜q‘的一个ä“Q务,òq¶æ‰§è¡Œå½“å‰ä“Q务ã€?</li><li>DiscardPolicyåQšä¸å¤„ç†åQŒä¸¢å¼ƒæŽ‰ã€?</li><li> 当然也å¯ä»¥æ ¹æ®åº”ç”¨åœºæ™¯éœ€è¦æ¥å®žçްRejectedExecutionHandler接å£è‡ªå®šä¹‰ç–略。如记录日志或æŒä¹…化ä¸èƒ½å¤„ç†çš„ä“Q务ã€?</li></ul></li><li>keepAliveTimeåQˆçº¿½E‹æ´»åŠ¨ä¿æŒæ—¶é—ß_(d¨¢)¼‰(j¨ª)åQšçº¿½E‹æ± 的工作线½E‹ç©ºé—²åŽåQŒä¿æŒå˜?g¨°u)zÈš„æ—‰™—´ã€‚所以如果ä“Q务很多,òq¶ä¸”æ¯ä¸ªä»ÕdŠ¡æ‰§è¡Œçš„æ—¶é—´æ¯”è¾ƒçŸåQŒå¯ä»¥è°ƒå¤§è¿™ä¸ªæ—¶é—ß_(d¨¢)¼Œæé«˜¾U¿ç¨‹çš„利用率ã€?</li><li>TimeUnitåQˆçº¿½E‹æ´»åŠ¨ä¿æŒæ—¶é—´çš„å•ä½åQ‰ï¼š(x¨¬)å¯é€‰çš„å•使œ‰å¤©åQˆDAYSåQ‰ï¼Œž®æ—¶åQˆHOURSåQ‰ï¼Œåˆ†é’ŸåQˆMINUTESåQ‰ï¼Œæ¯«ç§’(MILLISECONDS)åQŒå¾®¿U?MICROSECONDS, åƒåˆ†ä¹‹ä¸€æ¯«ç§’)和毫微秒(NANOSECONDS, åƒåˆ†ä¹‹ä¸€å¾®ç§’)ã€?</li></ul><p> </p><p><strong>二ã€Executorsæä¾›äº?ji¨£n)一些方便创建ThreadPoolExecutorçš„å¸¸ç”¨æ–¹æ³•ï¼Œä¸»è¦æœ‰ä»¥ä¸‹å‡ 个:(x¨¬)</strong> </p><p><strong>1ã€?nbsp;Executors.newFixedThreadPool(int nThreads);创å¾å›ºå®šå¤§å°(nThreads,大å°ä¸èƒ½‘…过int的最大å€?的线½E‹æ± </strong> </p><p>//¾U¿ç¨‹æ•°é‡ </p><p> int nThreads = 20; </p><p> //创å¾executor æœåŠ¡ </p><p> ExecutorService executor = Executors.newFixedThreadPool(nThreads) ; </p><p>é‡è²åŽçš„版本åQŒéœ€è¦å¤šä¼ 入实现äº?span style="font-family: monospace;">ThreadFactory接å£çš„对象ã€?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors. <span style="font-family: "sans serif", tahoma, verdana, helvetica;">newFixedThreadPool</span>(nThreads,<span style="font-family: monospace;">threadFactory);</span> </p><p>说明åQšåˆ›å»ºå›ºå®šå¤§ž®?nThreads,大å°ä¸èƒ½‘…过int的最大å€?的线½E‹æ± åQŒç¼“冲ä“Q务的队列为LinkedBlockingQueue,大å°ä¸ºæ•´åž‹çš„æœ€å¤§æ•°åQŒå½“使用æ¤çº¿½E‹æ± æ—Óž¼Œåœ¨åŒæ‰§è¡Œçš„ä“Q务数é‡è¶…˜q‡ä¼ 入的¾U¿ç¨‹æ± 大ž®å€¼åŽåQŒå°†ä¼?x¨¬)放入LinkedBlockingQueueåQŒåœ¨LinkedBlockingQueueä¸çš„ä»ÕdŠ¡éœ€è¦ç‰å¾…线½E‹ç©ºé—²åŽå†æ‰§è¡Œï¼Œå¦‚果攑օ¥LinkedBlockingQueueä¸çš„ä»ÕdŠ¡‘…过整型的最大数æ—Óž¼ŒæŠ›å‡ºRejectedExecutionExceptionã€?</p><p><strong>2ã€Executors.newSingleThreadExecutor()åQšåˆ›å»ºå¤§ž®äØ“(f¨´)1的固定线½E‹æ± ã€?/strong> </p><p> ExecutorService executor = Executors.newSingleThreadExecutor(); </p><p>é‡è²åŽçš„版本åQŒéœ€è¦å¤šä¼ 入实现äº?span style="font-family: monospace;">ThreadFactory接å£çš„对象ã€?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors. newSingleThreadScheduledExecutor(ThreadFactory threadFactory) </p><p>说明åQšåˆ›å»ºå¤§ž®äØ“(f¨´)1的固定线½E‹æ± åQŒåŒæ—¶æ‰§è¡Œä“QåŠ?task)çš„åªæœ‰ä¸€ä¸?其它的(ä»ÕdŠ¡åQ‰task都放在LinkedBlockingQueueä¸æŽ’é˜Ÿç‰å¾…执行ã€?</p><p>3ã€?strong>Executors</strong>.<strong>newCachedThreadPool</strong>()åQ›åˆ›å»ºcorePoolSizeä¸?åQŒæœ€å¤§çº¿½E‹æ•°ä¸ºæ•´åž‹çš„æœ€å¤§æ•°åQŒçº¿½E‹keepAliveTimeä¸?分钟åQŒç¼“å˜ä“Q务的队列为SynchronousQueue的线½E‹æ± ã€?</p><p> ExecutorService executor = Executors.newCachedThreadPool()åQ?</p><p> 当然也å¯ä»¥ä»¥ä¸‹é¢çš„æ–¹å¼åˆ›å»ºï¼Œé‡è²åŽçš„版本åQŒéœ€è¦å¤šä¼ 入实现äº?span style="font-family: monospace;">ThreadFactory接å£çš„对象ã€?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = </span>Executors.newCachedThreadPool(ThreadFactory threadFactory) ; </p><p>说明åQšä‹É用时åQŒæ”¾å…¥çº¿½E‹æ± çš„taskä»ÕdŠ¡ä¼?x¨¬)å¤ç”¨çº¿½E‹æˆ–å¯åŠ¨æ–°çº¿½E‹æ¥æ‰§è¡ŒåQŒæ³¨æ„事™å¹ï¼š(x¨¬)å¯åŠ¨çš„çº¿½E‹æ•°å¦‚æžœ‘…过整型最大值åŽä¼?x¨¬)抛出RejectedExecutionException异常åQŒå¯åЍåŽçš„线½E‹å˜?g¨°u)zÀL—¶é—´äØ“(f¨´)一分钟ã€?</p><p><strong>4ã€Executors.newScheduledThreadPool(int corePoolSize):创å¾corePoolSize大å°çš„线½E‹æ± ã€?/strong> </p><p>//¾U¿ç¨‹æ•°é‡ </p><p> int corePoolSize= 20; </p><p> //创å¾executor æœåŠ¡ </p><p> ExecutorService executor = Executors.newScheduledThreadPool(corePoolSize) ; </p><p>é‡è²åŽçš„版本åQŒéœ€è¦å¤šä¼ 入实现äº?span style="font-family: monospace;">ThreadFactory接å£çš„对象ã€?/span> </p><p><span style="font-family: "sans serif", tahoma, verdana, helvetica;"> ExecutorService executor = Executors.</span><span style="font-family: "sans serif", tahoma, verdana, helvetica;">newScheduledThreadPool</span>(<span style="font-family: "sans serif", tahoma, verdana, helvetica;">corePoolSize</span>, threadFactory)<span style="font-family: "sans serif", tahoma, verdana, helvetica;"> åQ?/span> </p><p> 说明åQšçº¿½E‹keepAliveTimeä¸?åQŒç¼“å˜ä“Q务的队列为DelayedWorkQueueåQŒæ³¨æ„ä¸è¦è¶…˜q‡æ•´åž‹çš„æœ€å¤§å€¹{€?/p><p><br /><br /><br /><br /><br /><br /></p><img src ="http://www.aygfsteel.com/stevenjohn/aggbug/422344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/stevenjohn/" target="_blank">abin</a> 2015-01-21 22:18 <a href="http://www.aygfsteel.com/stevenjohn/archive/2015/01/21/422344.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item></channel></rss> <footer>
<div class="friendship-link">
<a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a>
</div>
</footer>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
<a href="http://" target="_blank">²ìÑÅÏØ</a>|
<a href="http://" target="_blank">ºÍÆ½ÏØ</a>|
<a href="http://" target="_blank">¼Ó²éÏØ</a>|
<a href="http://" target="_blank">ƽÑôÏØ</a>|
<a href="http://" target="_blank">Ì©°²ÊÐ</a>|
<a href="http://" target="_blank">µÂÖÝÊÐ</a>|
<a href="http://" target="_blank">ÄþÇ¿ÏØ</a>|
<a href="http://" target="_blank">¸»Ô£ÏØ</a>|
<a href="http://" target="_blank">Ì쳤ÊÐ</a>|
<a href="http://" target="_blank">¸·Æ½ÏØ</a>|
<a href="http://" target="_blank">ÄÏÑôÊÐ</a>|
<a href="http://" target="_blank">½ðƽ</a>|
<a href="http://" target="_blank">»¨Á«ÊÐ</a>|
<a href="http://" target="_blank">»á²ýÏØ</a>|
<a href="http://" target="_blank">ÑÓÊÙÏØ</a>|
<a href="http://" target="_blank">Àè´¨ÏØ</a>|
<a href="http://" target="_blank">ÇåÔ·ÏØ</a>|
<a href="http://" target="_blank">¸ÞÀ¼ÏØ</a>|
<a href="http://" target="_blank">³ç×óÊÐ</a>|
<a href="http://" target="_blank">À³Î÷ÊÐ</a>|
<a href="http://" target="_blank">²ýÆ½Çø</a>|
<a href="http://" target="_blank">°×ÀÊÏØ</a>|
<a href="http://" target="_blank">ÉÌÇðÊÐ</a>|
<a href="http://" target="_blank">ÃçÀõÏØ</a>|
<a href="http://" target="_blank">¶÷Ê©ÊÐ</a>|
<a href="http://" target="_blank">ÒÁ½ð»ôÂåÆì</a>|
<a href="http://" target="_blank">èÈÑôÏØ</a>|
<a href="http://" target="_blank">ÁùÅÌË®ÊÐ</a>|
<a href="http://" target="_blank">ÎäÄþÏØ</a>|
<a href="http://" target="_blank">½ðÉ³ÏØ</a>|
<a href="http://" target="_blank">·ïÑôÏØ</a>|
<a href="http://" target="_blank">ÄÏÀÖÏØ</a>|
<a href="http://" target="_blank">ÆÖ½ÏØ</a>|
<a href="http://" target="_blank">·½³ÇÏØ</a>|
<a href="http://" target="_blank">¾ÅÁúÏØ</a>|
<a href="http://" target="_blank">ºÏÑôÏØ</a>|
<a href="http://" target="_blank">Ë®¸»ÏØ</a>|
<a href="http://" target="_blank">ÃÜÔÆÏØ</a>|
<a href="http://" target="_blank">ÁÙÌ¶ÏØ</a>|
<a href="http://" target="_blank">кÓÏØ</a>|
<a href="http://" target="_blank">аͶû»¢ÓÒÆì</a>|
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
</body>