﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-朋的博客</title><link>http://www.blogjava.net/chenpengyi/</link><description>MySQL资料，Java技术，管理思想，博弈论，Ajax，XP极限编程，H.264，HEVC，HDR</description><language>zh-cn</language><lastBuildDate>Sun, 07 Jun 2026 12:29:14 GMT</lastBuildDate><pubDate>Sun, 07 Jun 2026 12:29:14 GMT</pubDate><ttl>60</ttl><item><title>使用Future模式完成耗时的背景作业[JDK1.5 Concurrency]</title><link>http://www.blogjava.net/chenpengyi/archive/2007/11/01/157464.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Thu, 01 Nov 2007 05:11:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/11/01/157464.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/157464.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/11/01/157464.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/157464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/157464.html</trackback:ping><description><![CDATA[<p>
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<font size="4">
								<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-size: 12.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
												<br />个人理解</span>
										<span lang="EN-US">
												<font face="Times New Roman">Future</font>
										</span>
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式就是在主线程中当需要进行比较耗时的作业，但不想阻塞主线程的作业时，将耗时作业交由</span>
										<span lang="EN-US">
												<font face="Times New Roman">Future</font>
										</span>
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象在后台中完成，当主线程将来（这个</span>
										<span lang="EN-US">
												<font face="Times New Roman">Future</font>
										</span>
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的意义也就体现在这里了）需要时即可通过</span>
										<span lang="EN-US">
												<font face="Times New Roman">Future</font>
										</span>
										<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象获得已经作业对象。</span>
										<span lang="EN-US">
												<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
												<o:p>
														<font face="Times New Roman"> </font>
												</o:p>
										</span>
								</span>
						</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里写了一个简单的例子来说明这种模式，其实写这个例子主要是自己想熟悉一下</span>
				<span lang="EN-US">
						<font face="Times New Roman">JDK5</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">
						<font face="Times New Roman">concurrency</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包中</span>
				<span lang="EN-US">
						<font face="Times New Roman">FutureTask</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的用法了。例子模拟的是一个会计算账的过程，主线程中已经获得其他帐户的总额了，为了不让主线程等待</span>
				<span lang="EN-US">
						<font face="Times New Roman">PrivateAccount</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">返回而启用新的线程去处理，并使用</span>
				<span lang="EN-US">
						<font face="Times New Roman">FutureTask</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象来监控，最后需要计算总额的时候再尝试去获得</span>
				<span lang="EN-US">
						<font face="Times New Roman">PrivateAccount</font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的信息。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p>
								<font face="Times New Roman"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码如下：</span>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080"> 1</span>
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">package</span>
				<span style="COLOR: #000000"> testCallable;<br /></span>
				<span style="COLOR: #008080"> 2</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 3</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.Random;<br /></span>
				<span style="COLOR: #008080"> 4</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.Callable;<br /></span>
				<span style="COLOR: #008080"> 5</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.ExecutionException;<br /></span>
				<span style="COLOR: #008080"> 6</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">import</span>
				<span style="COLOR: #000000"> java.util.concurrent.FutureTask;<br /></span>
				<span style="COLOR: #008080"> 7</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080"> 8</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_175_203_Open_Image" onclick="this.style.display='none'; Codehighlighter1_175_203_Open_Text.style.display='none'; Codehighlighter1_175_203_Closed_Image.style.display='inline'; Codehighlighter1_175_203_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_175_203_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_175_203_Closed_Text.style.display='none'; Codehighlighter1_175_203_Open_Image.style.display='inline'; Codehighlighter1_175_203_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span id="Codehighlighter1_175_203_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span>
				<span id="Codehighlighter1_175_203_Open_Text">
						<span style="COLOR: #008000">/**</span>
						<span style="COLOR: #008000">
								<br />
						</span>
						<span style="COLOR: #008080"> 9</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span>
						<span style="COLOR: #808080">@author</span>
						<span style="COLOR: #008000"> chenpengyi<br /></span>
						<span style="COLOR: #008080">10</span>
						<span style="COLOR: #008000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span>
						<span style="COLOR: #008000">*/</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">11</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_236_1451_Open_Image" onclick="this.style.display='none'; Codehighlighter1_236_1451_Open_Text.style.display='none'; Codehighlighter1_236_1451_Closed_Image.style.display='inline'; Codehighlighter1_236_1451_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_236_1451_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_1451_Closed_Text.style.display='none'; Codehighlighter1_236_1451_Open_Image.style.display='inline'; Codehighlighter1_236_1451_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">public</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> SumAccountExample </span>
				<span id="Codehighlighter1_236_1451_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_236_1451_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">12</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">13</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_279_1448_Open_Image" onclick="this.style.display='none'; Codehighlighter1_279_1448_Open_Text.style.display='none'; Codehighlighter1_279_1448_Closed_Image.style.display='inline'; Codehighlighter1_279_1448_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_279_1448_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_279_1448_Closed_Text.style.display='none'; Codehighlighter1_279_1448_Open_Image.style.display='inline'; Codehighlighter1_279_1448_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">static</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">void</span>
						<span style="COLOR: #000000"> main(String[] args) </span>
						<span id="Codehighlighter1_279_1448_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_279_1448_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">14</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Init callable object and future task</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">15</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Callable pAccount </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> PrivateAccount();<br /></span>
								<span style="COLOR: #008080">16</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FutureTask futureTask </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> FutureTask(pAccount);<br /></span>
								<span style="COLOR: #008080">17</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
								<span style="COLOR: #008080">18</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Create a new thread to do so</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">19</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Thread pAccountThread </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Thread(futureTask);<br /></span>
								<span style="COLOR: #008080">20</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        pAccountThread.start();<br /></span>
								<span style="COLOR: #008080">21</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
								<span style="COLOR: #008080">22</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Do something else in the main thread</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">23</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Doing something else here<img src="http://www.blogjava.net/images/dot.gif" />.</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">24</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /></span>
								<span style="COLOR: #008080">25</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Get the total money from other accounts </span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">26</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">int</span>
								<span style="COLOR: #000000"> totalMoney </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Random().nextInt(</span>
								<span style="COLOR: #000000">100000</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">27</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">You have </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> totalMoney </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> in your other Accounts.</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">28</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">Waiting for data from Private Account<img src="http://www.blogjava.net/images/dot.gif" /></span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">29</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> If the Future task is not finished, we will wait for it</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">30</span>
								<span style="COLOR: #008000">
										<img id="Codehighlighter1_963_1065_Open_Image" onclick="this.style.display='none'; Codehighlighter1_963_1065_Open_Text.style.display='none'; Codehighlighter1_963_1065_Closed_Image.style.display='inline'; Codehighlighter1_963_1065_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_963_1065_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_963_1065_Closed_Text.style.display='none'; Codehighlighter1_963_1065_Open_Image.style.display='inline'; Codehighlighter1_963_1065_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">while</span>
								<span style="COLOR: #000000">(</span>
								<span style="COLOR: #000000">!</span>
								<span style="COLOR: #000000">futureTask.isDone())</span>
								<span id="Codehighlighter1_963_1065_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_963_1065_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">31</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_972_998_Open_Image" onclick="this.style.display='none'; Codehighlighter1_972_998_Open_Text.style.display='none'; Codehighlighter1_972_998_Closed_Image.style.display='inline'; Codehighlighter1_972_998_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_972_998_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_972_998_Closed_Text.style.display='none'; Codehighlighter1_972_998_Open_Image.style.display='inline'; Codehighlighter1_972_998_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span>
										<span style="COLOR: #0000ff">try</span>
										<span style="COLOR: #000000"> </span>
										<span id="Codehighlighter1_972_998_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_972_998_Open_Text">
												<span style="COLOR: #000000">{<br /></span>
												<span style="COLOR: #008080">32</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                Thread.sleep(</span>
												<span style="COLOR: #000000">5</span>
												<span style="COLOR: #000000">);<br /></span>
												<span style="COLOR: #008080">33</span>
												<span style="COLOR: #000000">
														<img id="Codehighlighter1_1031_1061_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1031_1061_Open_Text.style.display='none'; Codehighlighter1_1031_1061_Closed_Image.style.display='inline'; Codehighlighter1_1031_1061_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
														<img id="Codehighlighter1_1031_1061_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1031_1061_Closed_Text.style.display='none'; Codehighlighter1_1031_1061_Open_Image.style.display='inline'; Codehighlighter1_1031_1061_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            }</span>
										</span>
										<span style="COLOR: #000000"> </span>
										<span style="COLOR: #0000ff">catch</span>
										<span style="COLOR: #000000"> (InterruptedException e) </span>
										<span id="Codehighlighter1_1031_1061_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
												<img src="http://www.blogjava.net/images/dot.gif" />
										</span>
										<span id="Codehighlighter1_1031_1061_Open_Text">
												<span style="COLOR: #000000">{<br /></span>
												<span style="COLOR: #008080">34</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                e.printStackTrace();<br /></span>
												<span style="COLOR: #008080">35</span>
												<span style="COLOR: #000000">
														<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span>
										</span>
										<span style="COLOR: #000000">
												<br />
										</span>
										<span style="COLOR: #008080">36</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">37</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        Integer privataAccountMoney </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">null</span>
								<span style="COLOR: #000000">;<br /></span>
								<span style="COLOR: #008080">38</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Since the future task is done, get the object back</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">39</span>
								<span style="COLOR: #008000">
										<img id="Codehighlighter1_1167_1223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1167_1223_Open_Text.style.display='none'; Codehighlighter1_1167_1223_Closed_Image.style.display='inline'; Codehighlighter1_1167_1223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_1167_1223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1167_1223_Closed_Text.style.display='none'; Codehighlighter1_1167_1223_Open_Image.style.display='inline'; Codehighlighter1_1167_1223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        </span>
								<span style="COLOR: #0000ff">try</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_1167_1223_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_1167_1223_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">40</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            privataAccountMoney </span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000"> (Integer)futureTask.get();<br /></span>
										<span style="COLOR: #008080">41</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_1256_1284_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1256_1284_Open_Text.style.display='none'; Codehighlighter1_1256_1284_Closed_Image.style.display='inline'; Codehighlighter1_1256_1284_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_1256_1284_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1256_1284_Closed_Text.style.display='none'; Codehighlighter1_1256_1284_Open_Image.style.display='inline'; Codehighlighter1_1256_1284_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (InterruptedException e) </span>
								<span id="Codehighlighter1_1256_1284_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_1256_1284_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">42</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /></span>
										<span style="COLOR: #008080">43</span>
										<span style="COLOR: #000000">
												<img id="Codehighlighter1_1315_1343_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1315_1343_Open_Text.style.display='none'; Codehighlighter1_1315_1343_Closed_Image.style.display='inline'; Codehighlighter1_1315_1343_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
												<img id="Codehighlighter1_1315_1343_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1315_1343_Closed_Text.style.display='none'; Codehighlighter1_1315_1343_Open_Image.style.display='inline'; Codehighlighter1_1315_1343_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">catch</span>
								<span style="COLOR: #000000"> (ExecutionException e) </span>
								<span id="Codehighlighter1_1315_1343_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.blogjava.net/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_1315_1343_Open_Text">
										<span style="COLOR: #000000">{<br /></span>
										<span style="COLOR: #008080">44</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /></span>
										<span style="COLOR: #008080">45</span>
										<span style="COLOR: #000000">
												<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span>
								</span>
								<span style="COLOR: #000000">
										<br />
								</span>
								<span style="COLOR: #008080">46</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">The total moeny you have is </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> (totalMoney </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> privataAccountMoney.intValue()));<br /></span>
								<span style="COLOR: #008080">47</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">48</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">49</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
				</span>
				<span style="COLOR: #008080">50</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">51</span>
				<span style="COLOR: #000000">
						<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
						<br />
				</span>
				<span style="COLOR: #008080">52</span>
				<span style="COLOR: #000000">
						<img id="Codehighlighter1_1495_1809_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1495_1809_Open_Text.style.display='none'; Codehighlighter1_1495_1809_Closed_Image.style.display='inline'; Codehighlighter1_1495_1809_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_1495_1809_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1495_1809_Closed_Text.style.display='none'; Codehighlighter1_1495_1809_Open_Image.style.display='inline'; Codehighlighter1_1495_1809_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">class</span>
				<span style="COLOR: #000000"> PrivateAccount </span>
				<span style="COLOR: #0000ff">implements</span>
				<span style="COLOR: #000000"> Callable</span>
				<span id="Codehighlighter1_1495_1809_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.blogjava.net/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_1495_1809_Open_Text">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">53</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								<br />
						</span>
						<span style="COLOR: #008080">54</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    Integer totalMoney;<br /></span>
						<span style="COLOR: #008080">55</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span>
						<span style="COLOR: #008080">56</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    @Override<br /></span>
						<span style="COLOR: #008080">57</span>
						<span style="COLOR: #000000">
								<img id="Codehighlighter1_1572_1805_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1572_1805_Open_Text.style.display='none'; Codehighlighter1_1572_1805_Closed_Image.style.display='inline'; Codehighlighter1_1572_1805_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_1572_1805_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1572_1805_Closed_Text.style.display='none'; Codehighlighter1_1572_1805_Open_Image.style.display='inline'; Codehighlighter1_1572_1805_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">public</span>
						<span style="COLOR: #000000"> Integer call() </span>
						<span style="COLOR: #0000ff">throws</span>
						<span style="COLOR: #000000"> Exception </span>
						<span id="Codehighlighter1_1572_1805_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.blogjava.net/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_1572_1805_Open_Text">
								<span style="COLOR: #000000">{<br /></span>
								<span style="COLOR: #008080">58</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #008000">//</span>
								<span style="COLOR: #008000"> Simulates a time conusimg task, sleep for 10s</span>
								<span style="COLOR: #008000">
										<br />
								</span>
								<span style="COLOR: #008080">59</span>
								<span style="COLOR: #008000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />
								</span>
								<span style="COLOR: #000000">        Thread.sleep(</span>
								<span style="COLOR: #000000">10000</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">60</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        totalMoney </span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Integer(</span>
								<span style="COLOR: #0000ff">new</span>
								<span style="COLOR: #000000"> Random().nextInt(</span>
								<span style="COLOR: #000000">10000</span>
								<span style="COLOR: #000000">));<br /></span>
								<span style="COLOR: #008080">61</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">You have </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> totalMoney </span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000"> </span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000"> in your private Account.</span>
								<span style="COLOR: #000000">"</span>
								<span style="COLOR: #000000">);<br /></span>
								<span style="COLOR: #008080">62</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span>
								<span style="COLOR: #0000ff">return</span>
								<span style="COLOR: #000000"> totalMoney;<br /></span>
								<span style="COLOR: #008080">63</span>
								<span style="COLOR: #000000">
										<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #008080">64</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /></span>
						<span style="COLOR: #008080">65</span>
						<span style="COLOR: #000000">
								<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
		</div>
		<br />主线程获得了返回后即完成了总额的计算。<img src ="http://www.blogjava.net/chenpengyi/aggbug/157464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-11-01 13:11 <a href="http://www.blogjava.net/chenpengyi/archive/2007/11/01/157464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Concurrency in Practice Java并发（线程）最佳书籍 【下载】</title><link>http://www.blogjava.net/chenpengyi/archive/2007/10/18/153977.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Thu, 18 Oct 2007 10:46:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/10/18/153977.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/153977.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/10/18/153977.html#Feedback</comments><slash:comments>60</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/153977.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/153977.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" align="left">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">好久没有上来更新过了，最近在学习线程池实现，参考了</span>
				<span lang="EN-US">Tomcat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">Jetty</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的线程池的实现后，还是比较佩服他们的实现的，佩服瞬间突然回忆起来以前看过的书里面提到过</span>
				<span lang="EN-US">JDK1.5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">带了</span>
				<span lang="EN-US">doug lea</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">concurrency</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包，</span>
				<span lang="EN-US">doug lea</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">算是对</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">世界影响最大的人物之一了，其对</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的贡献绝对超过</span>
				<span lang="EN-US">James Gosling</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">世界的“言论”巨头（我认为而已）。这位可爱的老教授为</span>
				<span lang="EN-US">JDK</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的</span>
				<span lang="EN-US">Collection</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和如今的</span>
				<span lang="EN-US">Concurrency</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包作出的贡献是不可估量的，同时他还是</span>
				<span lang="EN-US">dlmalloc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的作者，相信</span>
				<span lang="EN-US">C</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">背景的程序员对这个</span>
				<span lang="EN-US">malloc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的新实现会比较熟悉，还出过关于</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并发的书，不过这里先不提啦，因为我看的不是这个，而是《</span>
				<span lang="EN-US">Java Concurrency in Practice</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">》，这本书是多人合著的，作者中不乏牛人，有</span>
				<span lang="EN-US">Joshua Bloch</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Effective Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作者）和</span>
				<span lang="EN-US">Doug Lea</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（不认识的，</span>
				<span lang="EN-US" style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings">
						<span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">J</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）等等（中文中惯用的表示牛人多的说法）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">既然得到了好书就要分享一下，这里不多做介绍了，赶紧把电子版传上来跟大家分享一下。<br /></span>
		</p>
		<span lang="EN-US">
				<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
				<o:p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
								<br />
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt" align="left">
								<img src="http://java.sun.com/developer/technicalArticles/Interviews/images/jcip-thumbnail.jpg" />
						</p>
						<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
								<br />
								<a title="Java concurrency in Practice download" href="/Files/chenpengyi/Java-Concurrency-in-Practice.rar">下载链接在此</a>
						</p>
				</o:p>
		</span><img src ="http://www.blogjava.net/chenpengyi/aggbug/153977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-10-18 18:46 <a href="http://www.blogjava.net/chenpengyi/archive/2007/10/18/153977.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两个经典的小故事</title><link>http://www.blogjava.net/chenpengyi/archive/2007/05/29/120633.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Tue, 29 May 2007 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/05/29/120633.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/120633.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/05/29/120633.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/120633.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/120633.html</trackback:ping><description><![CDATA[<p>
				<font size="2">在邮箱里找到了以前在网上看过的两个小故事，发上来给大家看看……o(∩_∩)o...，不用留言或者评论，因为不是我写的。</font>
		</p>
		<h2>考验</h2>
		<p>========================<br /><font size="2">我的头好晕。 <br />好像烧更高了，我不知道，一直昏昏沉沉的。 <br />我从山上跌下来的时候，天佑试图拉住我腰间的绳索，可惯性太大<wbr>，连他也被 一起扯了下来。触到地面的积雪时我昏了过去<wbr>，隐约感觉天佑把我背进了这个小山洞。无线电摔坏了<wbr>，我不知道时间到底过了多久，我也不知道我们到底还能不能得救<wbr>，我的双腿可能 跌断了，一直没有知觉。 <br />天佑只是轻微的擦伤，他一直照顾着我，偶尔清醒的时候<wbr>，看见他的脸，和他温柔的 眼睛会让我感觉好些，虽然他也一直愁眉<wbr>不展。 <br />"天佑，你说其他人会找到我们吗？ " <br />他疲惫的笑笑： "慧慧，别想那么多，还疼吗？ " <br />"脚还是没知觉，就是觉得好冷。 " <br />天佑往上爬了一点，把我抱在他怀里。 <br />"好点吗？ " <br />"嗯。 "也许只是心理作用，但我还是感觉到一丝温暖。 <br />"慧慧，我有一个好消息和一个坏消息，你想先听哪个？ " <br />"坏消息。 " <br />"我们的食物快吃完了，还剩下一版巧克力。 " <br />"那好消息呢？ " <br />"雪崩了，洞口被雪封了大半，空气还能进来，我们大概勉强还能爬出<wbr>去。 " <br />"这算什么好消息！我们要死在这里了！ " 我的眼泪难过得一下子<wbr>冲了出来。 <br />"傻瓜，这是老天在让我们享受二人世界呢。 " 天佑笑了。 <br />"你还有心情开玩笑。 " 我被他逗乐了，咳嗽起来。 <br />天佑轻轻拍着我的背，把我搂在怀里。 <br />"慧慧，等我们回去了，答应我嫁给我好吗？ " <br />"我们还回的去吗？ " <br />"当然可以！我们在一起这么长时间了，我都没有正式向你求过婚<wbr>，也许现在不合时宜，但是我想这个时候你肯定不会拒绝我，所以<wbr>，答应我，嫁给我好吗？ " <br />我哭了，但这次是幸福的眼泪。 <br />"好的，天佑，我答应你。 " <br />"乖孩子，为了那一天，你一定不要轻言放弃，好好活下去，答应我<wbr>，好吗？ " <br /><br /><br />"好的。 "我拼命的点头，可又一下子头晕了。 <br />"好了，乖乖的睡一下，我会叫醒你的。 " <br />"天佑，我的脚还是没有知觉。 " <br />天佑爬到我脚边。 "感觉到我在掐你吗？ " <br />"没有 "。 <br />"这样呢？ " <br />"还是没有。 " <br />"这样？ " <br />"没有。 " <br />天佑笑笑： "呵呵，慧慧，你的脚爬山累了，它想好好休息一下。<wbr> " "天佑，如果我不能走路了，你还会要我吗？ " <br />"要！不管你变成什么样我都要！ " <br />"天佑 ……" <br />"好了，慧慧，好好睡，来，闭上眼睛。 " <br />我睡了过去。 <br />再次被摇醒的时候，头晕得更厉害了。天佑拿着巧克力在我面前晃着<wbr>。 <br />"慧慧，吃饭咯。 " <br />"你吃吧，我不饿。 " <br />"不行，好孩子听话。 " <br />"可我喉咙干的咽不下东西。 " <br />天佑想了想，把巧克力掰下一小块放进嘴里含了一会儿，吻住了我。 <br />融化的热巧克力顺着他的嘴唇流进我干涸的嘴里，虽然我的味蕾已经麻<wbr>痹，但我还是隐约感到了一丝甜味。天佑又用嘴融化了一小块雪<wbr>，送进我口里。就这样一口巧克力，一口雪，天佑把一版巧克力的两小<wbr>块送进了我的身体里，我的胃隐隐有了些许暖意，但头更晕了。天佑<wbr>，你不吃吗？ "他将剩下的巧克力收了起来。"我喂你的时候也吃过<wbr>了。 ""你都喂给我了呀！ " 我还是会吃进去那么一小点的<wbr>，你不是连这点都要跟我抢吧，太黑了噢。 呵。我握紧了天佑的手<wbr>： "你对我真好。 " "所以你要好好活下去呀，乖，继续睡吧<wbr> 。" 嗯。 " 头好晕。就这样，整块的巧克力天佑都喂给了我<wbr>，可他自己一点都没吃，我问他的时候，他说洞里还有山鼠<wbr>，他抓到过两只，可以吃的，他连皮带肉都吃下去了，所以精力充沛<wbr>。 我知道他在骗我，可他的精神还真的不错，大概真的是我太虚弱了<wbr>吧，头晕的我快连 说话的力气都没有了。 于，我们听到了直升飞机<wbr>的轰鸣，天佑努力的探了身子出去，说了些什么， 虚弱的已经快不行<wbr>了，甚至连他喊的话都听不清楚。轰鸣远走了。 慧慧，醒醒，慧慧<wbr>。 " 我努力睁开眼。 你听到了吗？直升飞机回去取救援设备了<wbr>。 " "我们终于得救了吗？ " 天佑笑了。 "对不起，慧慧<wbr>，他们只能带一个人走。所以，是我得救了。 " 我一下子没反应过<wbr>来他说什么。天佑似乎看出了我疑惑的表情。 "我告诉他们<wbr>，这里只有我一个人。谢谢你，慧慧，没有你我绝对撑不到现在。 <wbr>" 还是没明白他在说什么，但我看见他正拿着瑞士军刀一下一下刺入<wbr>我的腹 腔。"慧慧，你知道，物资是不够的，我也不知道我们究竟什<wbr>么时候能得救，所以你不用感谢我把所有的食物给你<wbr>，如果你不活下去我就没有食物和生还下去的可能了<wbr>。但是现在既然我已经获救，那你的使命也就结束了，我要谢谢你。<wbr> " 天佑将瑞士军刀最后一次重重的插入我的身体，慢慢的旋转着<wbr>。他吻了我的额头。"慧慧，下辈子再娶你，别了，我爱你。 "<wbr> 说完他拔出刀子往外爬去。 <br />我鼓起最后的力气掀开盖着我下半身的睡袋。 膝盖以下只剩一堆挂着<wbr>血肉的森森白骨……<br /><br />======================================================================<br /><br /></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></font></p>
		<h2>我死后,你还会娶别人吗?<br /></h2>
		<p align="justify">
				<font size="2">======================================================================<br />“倘若有一天我死了，你会再娶其它女人么？”我记得问这话是在我与君的结婚一周年纪念日上。那时，他正忙着与锅里的鲜鱼对战，根本无暇理睬我。 “啊  <br />？哦，也许会吧！这得等你真死了才能说。”“什么？”我佯怒，从他身后抱住他：“你就这么讨厌我啊？” <br /><br />君笑，关上火转身抱我：“傻丫头，我答应过你不骗你。如果我说不娶可我后来娶了，不就骗了你么？” <br /><br />我也笑，躲在他怀里，快乐得像只小鸟“好吧，准你娶她。不过，不许她碰我那些漂亮娃娃。”“为什么？” <br /><br />“因为，那是你送我的爱的信物，死后啊，我要在那儿看着你！”“哇！好恐怖啊！”君大笑地抱紧我“傻孩子，你的命啊，长着呢！” <br /><br />现在，我就活在这堆娃娃里，我想象不到短短十天，我便真的与君阴阳相隔。 <br /><br />我是死于车祸的。一切来的那么突然。那时，我正盘算着周末我们要去哪儿旅行，那车就飞速冲来了。其实，没什么很大的痛楚，清醒时，我看到人们七手八脚的把我抬上救护车，只觉得好笑，因为我知道那是多余的。意识到自己的死亡，我一点也不难过。我一向没什么朋友，只有君。现在仍可以陪着君，看着君就行了。管他是什么样的形态呢。想到这儿，我便大步走回家。 <br /><br />家门前，我犹豫了。我记得以前听说魂是可以越墙而入的。我试了试，居然成功了！这令我兴奋不已，又来回再试了几次。嘿，做魂也没什么不好的。起码钥匙省了！ <br /><br />进到屋内，我逛了一圈，君还没有回来。突然想起，这是上班时间。于是又在屋内不停的溜弯儿。欣赏我们的房子是我生前最爱做的事儿。当然，死后也不例外。虽然，这间屋子，我已再熟悉不过。因为，在这儿，我渡过了我一生中最幸福最快乐的375日。至今，我还记得结婚那天，君在家门前望着我的表情。他说：“丫头，以后这就是我们的家了！我们的！”是啊，我和君的。从那天起，我便不停装扮它，直至今天，我再也无法为它效力为止。 <br /><br />我看到屋内的粉红色窗帘，卡通的大地毯和那堆了大半个卧室的娃娃。突然想起君每每抚摸我头发轻声说：“你真是个孩子。”时，那无奈又怜爱的样子。是啊，能把家弄像个玩具店，我不是孩子又是什么呢？只可惜再也看不到君在说这话时的表情了。 <br /><br />我叹了口气，回到娃娃堆坐下。不知不觉中竟睡着了。 <br /><br />醒来时，已是天黑。我感到了一丝寒气。使抱怨起君竟然忘了把我抱回暖烘烘的被窝。这才猛然想起，我已从君的生命中消失了，而且是很彻底的。我起身，开始绕着屋子找他，最后是在卫生间里找到我心爱的君的。 <br /><br />他趴在浴缸上，旁边摆着许多空酒瓶，地上被吐得乱七八糟，一股刺鼻的味儿飘散在空气中。我不悦地捏着鼻子，蹲下来看他。竟发现他脸上挂着泪痕。天！我的君会哭？！那个坚强无比的他竟然哭了！多不可思议啊！我试图拉起他，可手却穿越了他的身体！我试了一次又一次，在筋疲力尽后，我决定放弃。头一次，我知道自己是这么无能的。在我的君如此近时，我连拉他一把的能力都没有。这样的妻子要来何用呢？ <br /><br />我轻轻吻了吻他的嘴唇，在他的身边坐下。除了这样陪他，我想不到还有什么其它的办法。 <br /><br />“丫头，不要走，不要……”我听见君在叫我。我知道他是说醉话了。我笑：“傻瓜，我这么爱你，怎会舍得离你而去呢？” <br /><br />一个月后，日子渐渐恢复正常。我的君仍旧准时准点的上下班，只是不再爱笑；而我，也依旧是那个快乐的小主妇，乖乖的呆在家陪我的娃娃们，只是君不曾发觉；我们还是那样过着属于我们两个人的日子，屋内的一切都没有改变过。直到有一天，玲的出现。 <br /><br />玲按门铃时，君正在书房里加班做他的计划书，我则在一旁傻呵呵的陪他。我想不出在夜里这个时候会有什么人来访？走到客厅，便看到性感的玲和呆呆的君。 <br /><br />这是我第一次见玲。她留着长长的卷发，穿着黑色的性感套装，化了很浓的妆。四周全是她身上散发出的香水味儿。我不禁低头看了看自己身上的娃娃裙和兔兔拖鞋。和她比，我是名符其实的孩子。 <br /></font>
		</p>
		<p align="justify">
				<font size="2">“我搬来了。”听到玲这样说，我才注意到她身边的行李袋。搬来？住哪儿？我和君的家么？我奇怪的望着她。 <br /><br />“别胡闹，你给我回去”君似乎在发火。我头一次看到君发火的样子，很凶。我害怕。 <br /><br />“凭什么？你老婆都死了，难道我们现在不应该正大光明了吗？”玲笑得很灿烂，可我觉得很冷“瞧！你老婆死得多好啊。多会挑时间啊。连离婚都省得你和她说了……”“啪！”我看见君打了玲一巴掌。我惊呆了！君怎么会打人呢？他平时连骂一声都不曾有过的。如此温柔的君竟然会打人？他还有多少是我不曾知道的？？ <br /><br />“哼！现在打我？！以前在我床上对我甜言蜜语的日子，你忘记了是吧！你可别忘了，你是答应过我和你老婆离婚娶我的！……”离婚？！君想和我离婚么？他不爱我？他竟要娶玲？我怎么一点也不曾发觉？玲再说的话，我已一个字都听不进去。我跌跌撞撞的走回我的娃娃堆。抱着它们。我觉得鼻子酸酸的，一股热浪从眼里涌了出来。 <br /><br />原来，灵魂也会流泪啊！<br /><br />玲就这样搬进了我和君的家，像个女主人一样睡在我和君的床上，不同的只是君搬去了客厅。她换掉我的卡通地毯和粉红窗帘。拿走我衣橱里的娃娃裙和鞋架上的兔兔鞋。她把它们通通扔到垃圾箱里。 <br /><br />君什么也不说，只默默地把它们捡回来，洗干净，再放进我深爱的娃娃堆里。然后连续不断的对我说：“丫头，对不起，我对不起你啊！”我望着君，心疼的掉泪。可我不愿原谅他！我无法接受我和君的生活中，出现一个莫明其妙的玲。她像个女皇一样在我和君的屋子里指手划脚，把我一点点挤出去；把我曾精心装扮的小屋变成她的家。尤其让我无法忍受的是，君的欺骗。他为了玲欺骗我！他说过不会骗我的，连我死后的事儿都不愿意欺骗的君，为什么会在我还在人世时，就和玲在一块儿呢？一瞬间，我与君有过的幸福日子显得那么苍白无力。 <br /><br />“这堆垃圾给我扔了！”玲指着我的鼻尖对君说。我看了看四周，明白了，她指的是我的宝贝娃娃。这些都是君送我的。是我们每一次快乐的纪念。第一次约会，第一次做饭，第一次接吻……我们都异常珍惜。还说以后要留给孩子看，告诉他们爸爸妈妈有多么幸福，可如今……天！我看到了什么？君在收拾它们！他要扔掉它们么？他忘了我说过我活在娃娃堆里么？他真的不要我了？一点也再想念他的丫头？我拼命的摇头，却阻止不了他的动作。 <br /><br />君把娃娃收做一堆时，玲很满意地笑了：“快点，扔了它们，我们得忘了过去，开始新的生活了。”君看了看玲，并不理睬她。只很温柔的在每个娃娃的脸上都亲上一口，像以前亲吻我那样。“玲，你走吧！我求你了！离开我和丫头的家！我不会扔了它们，也不能扔了它们！我的丫头活在里面，她在看着我啊！”玲愤怒的望着君：“你说过，你爱我，你是我的！”“不是，不是！对不起，我骗了你，骗了丫头，更骗了我自己！”君失声痛哭“我只爱丫头，只爱她一个啊！任何人都代替不了她，可是，我明白的太晚了……”我奔上前，像以前一样抱住他的后背。泪水横飞，我不能不原谅他啊！ <br /><br />不久，玲搬走了。像来时那样匆忙。连声再见都没和君说。我想她是伤心的，我看着她忧郁的背影想为她做些什么，可有心无力。我不恨她，只希望她以后一切都可以很好。就像我不恨君一样，我知道爱一旦深入骨髓，就不懂怎么会恨了。 <br /><br />玲走后，又恢复以前宁静而冷清的日子。君把我们的屋子恢复原样。没事儿时便捧着我的照片发呆。要不就一夜接一夜的不停工作。他把自己封闭起来。看着他日渐清瘦的脸庞，我心里说不出是什么滋味儿。 <br /><br />欣便是在那时候闯入了君的生活。 <br /><br />欣与君的相识平淡无奇。那日，欣刚搬到隔壁的空屋，可保险丝断了，便来向君借。 <br /><br />我知道君看到欣时愣住了，因为我也愣住了。欣与我长得出奇的像。只是眉宇间多了份成熟。我看到君抱紧欣叫她丫头时，欣莫名又尴尬的表情。忍不住大笑。我的君竟然也有此等愚笨的时候！从此，欣和君便开始了似有似无的交往。 <br /><br />欣是个很温柔的女人。与创造性幼稚的我是完全不同的。她常在我和君的小屋出入，为君收拾房子，做出可口的饭菜，但从不过夜。我就那么每天坐在娃娃堆里，看着她擦拭我的照片，打扫娃娃身上的灰尘，看她不厌其烦的听君讲我和他的故事…… <br /><br />我打了个很大的哈欠，我想我呆乏了，或许应该换个地方。 <br /><br />君和欣的婚礼是那么自然。我甚至没有一丝嫉妒。婚后的欣像以前一样，她没改变房中任何一点小摆设，包括我那堆曾被玲称为垃圾的娃娃们。望着她每日奔波忙碌的样子，我觉得像是一幅温馨而美丽的画。突然间发现我已是那么多余了。可是，我不愿离开君。 <br /><br />欣怀孕了。这令君兴奋不已。初为人父的喜悦是无法言语的。他像当初娇惯我一般宠着欣，甚至有过之而无不及。 <br /><br />我想欣是幸福的。可我又该如何呢？这个的问题一直困惑着我，直到那日。 <br /><br />那天，君外出了。我看到欣站在娃娃堆前摸着肚子自言自语“宝宝，你会很幸福的，因为你有两个妈妈疼。”然后，她摸了摸娃娃的脸蛋：“丫头，你也很疼我们的宝宝的。对么？”我明白了，欣不是自言自语，而是在对我说。 <br /><br />我释然了。站起来，伸了个大懒腰。窗外明媚的阳光透过玻璃照在我的身上，暖洋洋的。我知道，宝宝只会有一个妈妈疼。便起身离开我心爱的娃娃们，我相信，很快会再见的。 <br /><br />数月后，君与欣生下一漂亮的女儿，取名叫丫头。  </font>
		</p><img src ="http://www.blogjava.net/chenpengyi/aggbug/120633.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-05-29 11:07 <a href="http://www.blogjava.net/chenpengyi/archive/2007/05/29/120633.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL Varchar类型的改变</title><link>http://www.blogjava.net/chenpengyi/archive/2007/03/20/104932.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Tue, 20 Mar 2007 05:14:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/03/20/104932.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/104932.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/03/20/104932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/104932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/104932.html</trackback:ping><description><![CDATA[<p>MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255，其数据范围可以是0~255或1~255（根据不同版本数据库来定）。<br />在MySQL5.0以上的版本中，varchar数据类型的长度支持到了65535，也就是说可以存放<span>65532个字节的数据，起始位和结束位占去了3个字节</span>，也就是说，在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放，这样就能有效的减少数据库文件的大小。<br /><br />PS：如果在varchar中你已经设定了数据类型的长度，eg. varchar(4)，这时对varchar列中可以写入4个字节的字符，eg. "abcd"，如果写入4个以上的字符，默认情况下会截去后面的部分，eg. 输入"abcdeg"，实际存储到数据中的是"abcd"。</p><img src ="http://www.blogjava.net/chenpengyi/aggbug/104932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-03-20 13:14 <a href="http://www.blogjava.net/chenpengyi/archive/2007/03/20/104932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用JDK1.5的工具对远程的Java应用程序进行监测</title><link>http://www.blogjava.net/chenpengyi/archive/2007/03/14/103771.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Wed, 14 Mar 2007 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/03/14/103771.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/103771.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/03/14/103771.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/103771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/103771.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<br />
						<br />   最近需要在</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系统上对</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的应用系统进行监测，就用到了</span>
				<span lang="EN-US">JDK1.5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">附带的工具</span>
				<span lang="EN-US">jps</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">Java Virtual Machine Process Status Tool</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，查看</span>
				<span lang="EN-US">JVM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程状态的工具），</span>
				<span lang="EN-US">jstat(Java Virtual Machine Statistics Monitoring Tool</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，运行数据监测工具</span>
				<span lang="EN-US">)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以及</span>
				<span lang="EN-US">jstatd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（</span>
				<span lang="EN-US">jstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">daemon</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序，利用</span>
				<span lang="EN-US">RMI</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行远程监控）。（建议可以使用</span>
				<span lang="EN-US">jvmstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包，可视化的</span>
				<span lang="EN-US">jstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">监控工具，可以在</span>
				<span lang="EN-US">
						<a href="http://java.sun.com/performance/jvmstat/">http://java.sun.com/performance/jvmstat/</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部署过程描述如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在需要监测的机器（我这里是</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机器）部署相关应用：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">a)<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在你需要进行监测的机器上安装</span>
				<span lang="EN-US">JDK1.5</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（狂晕一阵子），别倒下（这个部分就不多说了，因为如果这里还要解释的话，那我就晕了）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">b)<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">正确设置</span>
				<span lang="EN-US">Java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的运行环境。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">c)<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">启动</span>
				<span lang="EN-US">jstatd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令如下：</span>
				<span lang="EN-US">./jstatd -J-Djava.security.policy=all.policy</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一般来说呢，这里是会出现问题的，那就是</span>
				<span lang="EN-US">permission</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的问题了，还好，</span>
				<span lang="EN-US">Sun</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网站上给了相关的解决方法，方法如下，在</span>
				<span lang="EN-US">jdk/…/security/ java.policy</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文件中添加下面的代码：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">grant codebase "file:${java.home}/../lib/tools.jar" {</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">permission java.security.AllPermission;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">};</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后重新启动</span>
				<span lang="EN-US">jstatd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">d)<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">完了，别让人乱动就好了，我经常是不小心就按</span>
				<span lang="EN-US">CTRL+C</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">把程序关闭了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">       </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在客户端（监控者使用的机器）的操作：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">a)<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用</span>
				<span lang="EN-US">jps</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看远端机器有哪些</span>
				<span lang="EN-US">JVM</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程在使用当中，命令如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">jps 172.25.1.24 //</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">远端机器的</span>
				<span lang="EN-US">IP</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址或名称</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">屏幕输入如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">13686 Jstatd</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">14115 XXXJavaServer</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">15117 Jserver</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">b)<span style="FONT: 7pt 'Times New Roman'">        </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">从上面可以看到远端机器的</span>
				<span lang="EN-US">Jstatd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进程已经启动起来了。我们就可以使用</span>
				<span lang="EN-US">jstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对相关进程的具体情况进行查看。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Jstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令用法如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">jstat -&lt;option&gt; [-t] [-h&lt;lines&gt;] &lt;vmid&gt; [&lt;interval&gt; [&lt;count&gt;]]</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解释如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Option</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包括以下选项：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-class</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-compiler</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gc</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gccapacity</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gccause</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcnew</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcnewcapacity</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcold</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcoldcapacity</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcpermcapacity</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-gcutil</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">-printcompilation</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Vmid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是</span>
				<span lang="EN-US">jps</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">查看到的进程</span>
				<span lang="EN-US">id</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，如上</span>
				<span lang="EN-US">Jserver</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的进程</span>
				<span lang="EN-US">id</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是</span>
				<span lang="EN-US">15117</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Interval</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是时间间隔，单位为毫秒，</span>
				<span lang="EN-US">1000</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是一秒。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">Count</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是需要查看的次数。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">例子假设我们需要查看</span>
				<span lang="EN-US">172.25.1.24</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">机器</span>
				<span lang="EN-US">vmid</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为</span>
				<span lang="EN-US">15117</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US">gc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的情况，可以输入下面的命令：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">jstat -gc 15117@172.25.1.24 1000 3</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后你能看到四行信息（一行为</span>
				<span lang="EN-US">title</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，剩下的就是你要的信息了），仔细看看就可以发现很多信息的了（如果不明白，可以问我，</span>
				<span lang="EN-US">6-6</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">c)<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">那么下面就开始配置可视化的监控包，</span>
				<span lang="EN-US">jvmstat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，下载好了后，解压到任意目录。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">执行</span>
				<span lang="EN-US">visualgc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，然后就可以看到可视化的监控窗口。不过，好像现在只提供</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的</span>
				<span lang="EN-US">visualgc</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的启动脚本，所以在</span>
				<span lang="EN-US">Windows</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下或者</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">最好使用我下面提供的方式：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">Linux</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span lang="EN-US">/usr/java/jdk1.5/bin/java –Xbootclasspath/p:” /usr/java/jdk1.5/lib/tools.jar” –jar jvmstat/jars/visualgc.jar vmid@server</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">Windows</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下也一样，就是改改</span>
				<span lang="EN-US">jdk</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的路径就好了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">成功执行后你就能看见一个</span>
				<span lang="EN-US">java</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的监视窗口（样子还蛮专业的），这个时候就</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可以开始监视了。</span>
		</p><img src ="http://www.blogjava.net/chenpengyi/aggbug/103771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-03-14 13:50 <a href="http://www.blogjava.net/chenpengyi/archive/2007/03/14/103771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JavaCC做语法分析[转]</title><link>http://www.blogjava.net/chenpengyi/archive/2007/01/30/96812.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Tue, 30 Jan 2007 15:37:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2007/01/30/96812.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/96812.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2007/01/30/96812.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/96812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/96812.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JavaCC 语法 文法分析 解析&nbsp;&nbsp;<a href='http://www.blogjava.net/chenpengyi/archive/2007/01/30/96812.html'>阅读全文</a><img src ="http://www.blogjava.net/chenpengyi/aggbug/96812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2007-01-30 23:37 <a href="http://www.blogjava.net/chenpengyi/archive/2007/01/30/96812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL新强大特性——事件，MySQL DBA必看！</title><link>http://www.blogjava.net/chenpengyi/archive/2006/10/29/77931.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Sun, 29 Oct 2006 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/10/29/77931.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/77931.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/10/29/77931.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/77931.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/77931.html</trackback:ping><description><![CDATA[<p>
				<font color="#000000" size="2">MySQL的事件特性是一个相当有用的特性，特别对于MySQL单机和集群的数据库管理员DBA，相信是DBA必定要掌握的知识。也肯定当MySQL的DBA学习完了这个特性后，将这个特性用好，可以给自己省下60％的工作量。<br />正文在MySQL栏目中，已经做成PDF供大家下载了，地址是：<br /><a href="/chenpengyi/articles/77933.html">http://www.blogjava.net/chenpengyi/articles/77933.html</a><br /><br />下面是一些内容节选：<br /><br />设定事件并运行</font>
		</p>
		<p>
				<font color="#000000" size="2">我们从MySQL downloads page上下载了MySQL 5.1 Beta版，安装到XP上，启动MySQL服务，用root用户打开MySQL客户端：</font>
		</p>
		<p>
				<font color="#000000" size="2">mysql&gt; use test;</font>
		</p>
		<p>
				<font color="#000000" size="2">Database changed</font>
		</p>
		<p>
				<font color="#000000" size="2">mysql&gt; create table test.t (s1 timestamp);</font>
		</p>
		<p>
				<font color="#000000" size="2">Query OK, 0 rows affected (0.11 sec)</font>
		</p>
		<p>
				<font color="#000000" size="2">
				</font> </p>
		<p>
				<font color="#000000" size="2">mysql&gt; create event e on schedule every 1 second do</font>
		</p>
		<p>
				<font color="#000000" size="2">       insert into test.t values (current_timestamp);</font>
		</p>
		<p>
				<font color="#000000" size="2">Query OK, 1 row affected (0.00 sec)</font>
		</p>
		<p>
				<font color="#000000" size="2">
				</font> </p>
		<p>
				<font color="#000000" size="2">mysql&gt; set global event_scheduler = 1;</font>
		</p>
		<p>
				<font color="#000000" size="2">Query OK, 0 rows affected (0.00 sec)</font>
		</p>
		<p>
				<font color="#000000" size="2">
				</font> </p>
		<p>
				<font color="#000000" size="2">/* 3-second delay */</font>
		</p>
		<p>
				<font color="#000000" size="2"> </font>
				<font color="#000000" size="2">mysql&gt; select * from test.t;</font>
		</p>
		<p>
				<font color="#000000" size="2">+---------------------+</font>
		</p>
		<p>
				<font color="#000000" size="2">| s1                  |</font>
		</p>
		<p>
				<font color="#000000" size="2">+---------------------+</font>
		</p>
		<p>
				<font color="#000000" size="2">| 2006-04-05 15:44:26 |</font>
		</p>
		<p>
				<font color="#000000" size="2">| 2006-04-05 15:44:27 |</font>
		</p>
		<p>
				<font color="#000000" size="2">| 2006-04-05 15:44:28 |</font>
		</p>
		<p>
				<font color="#000000" size="2">+---------------------+</font>
		</p>
		<p>
				<font color="#000000" size="2">上面是MySQL “事件”特性的“Hello World”例子，给大家演示的是每隔一秒钟向行内插入一条时间的记录。<br /></font>
		</p><img src ="http://www.blogjava.net/chenpengyi/aggbug/77931.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2006-10-29 22:05 <a href="http://www.blogjava.net/chenpengyi/archive/2006/10/29/77931.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Limit参数优化MySQL查询</title><link>http://www.blogjava.net/chenpengyi/archive/2006/07/29/60679.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Fri, 28 Jul 2006 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/07/29/60679.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/60679.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/07/29/60679.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/60679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/60679.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="font-family: 宋体;">优化</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">查询的</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">参数</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="" lang="EN">
						<o:p>
								<font size="2"> </font>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">
				<font size="2">
						<span style="font-family: 宋体;">我们在做一些查询的时候总希望能避免数据库引擎做全表扫描，因为全表扫描时间长，而且其中大部分扫描对客户端而言是没有意义的。那么在</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">中有那些方式是可以避免全表扫面的呢？除了我们大家很熟悉的通过使用索引列或分区等方式来进行查询的优化之外还有那些呢？</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">
				<font size="2">
						<span style="font-family: 宋体;">前些天看了一个老外写的程序，在</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">查询中使用了很多</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">关键字，这就让我很感兴趣了，因为在我印象中，</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">关键字似乎更多被使用</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">数据库的程序员用来做查询分页（当然这也是一种很好的查询优化），那在这里举个例子，假设我们需要一个分页的查询</span>
						<span style="font-family: 宋体;">，Oracle中一般来说都是用以下</span>
						<span style="" lang="EN">SQL</span>
						<span style="font-family: 宋体;">句子实现：</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21pt;">
				<span style="" lang="EN">
						<font size="2">SELECT * FROM <o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt;">
				<span style="" lang="EN">
						<font size="2">( SELECT a1.*, rownum rownum_ <o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42pt; text-indent: 21pt;">
				<span style="" lang="EN">
						<font size="2">FROM testtable a1<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 63pt; text-indent: 21pt;">
				<span style="" lang="EN">
						<font size="2">WHERE rownum &gt; 20)<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 84pt; text-indent: 21pt;">
				<span style="" lang="EN">
						<font size="2">
								<span style=""> </span>WHERE rownum_ &lt;= 1000<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">这个语句就能查询到</span>
						<span style="" lang="EN">testtable</span>
						<span style="font-family: 宋体;">表中的</span>
						<span style="" lang="EN">20</span>
						<span style="font-family: 宋体;">到</span>
						<span style="" lang="EN">1000</span>
						<span style="font-family: 宋体;">记录，而且还需要嵌套查询，效率不会太高，看看</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">的实现：</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<span style="" lang="EN">
						<font size="2">
								<span style="">       </span>SELECT * FROM testtable a1 limit 20,980;<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">这样就能返回</span>
						<span style="" lang="EN">testtable</span>
						<span style="font-family: 宋体;">表中的</span>
						<span style="" lang="EN">21</span>
						<span style="font-family: 宋体;">条到（</span>
						<span style="" lang="EN">20</span>
						<span style="font-family: 宋体;">＋</span>
						<span style="" lang="EN">980</span>
						<span style="font-family: 宋体;">＝）</span>
						<span style="" lang="EN">1000</span>
						<span style="font-family: 宋体;">条的记录。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">实现语法确实简单，但如果要说这里两个</span>
						<span style="" lang="EN">SQL</span>
						<span style="font-family: 宋体;">语句的效率，那就很难做比较了，因为在</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">中</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">选项有多种不同的解释方式，不同方式下的速度差异是很大的，因此我们不能从这语句的简洁程度就说谁的效率高。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">不过对程序员来说，够简单就好，因为维护成本低，呵呵。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">下面讲讲这个</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">的语法吧：</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>SELECT ……. --Select</span>
						<span style="font-family: 宋体;">语句的其他参数</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt;">
				<span style="" lang="EN">
						<font size="2">[LIMIT {[offset,] row_count | row_count OFFSET offset}]<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt;">
				<font size="2">
						<span style="font-family: 宋体;">这里</span>
						<span style="" lang="EN">offset</span>
						<span style="font-family: 宋体;">是偏移量（这个偏移量的起始地址是</span>
						<span style="" lang="EN">0</span>
						<span style="font-family: 宋体;">，而不是</span>
						<span style="" lang="EN">1</span>
						<span style="font-family: 宋体;">，这点很容易搞错的）顾名思义就是离开起始点的位置，而</span>
						<span style="" lang="EN">row-count</span>
						<span style="font-family: 宋体;">也是很简单的，就是返回的记录的数量限制。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt;">
				<span style="" lang="EN">
						<font size="2">Eg. SELECT * FROM testtable a limit 10,20 where ….<o:p></o:p></font>
				</span>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt;">
				<font size="2">
						<span style="font-family: 宋体;">这样就能使结果返回</span>
						<span style="" lang="EN">10</span>
						<span style="font-family: 宋体;">行以后（包括</span>
						<span style="" lang="EN">10</span>
						<span style="font-family: 宋体;">行自身）的符合</span>
						<span style="" lang="EN">where</span>
						<span style="font-family: 宋体;">条件的</span>
						<span style="" lang="EN">20</span>
						<span style="font-family: 宋体;">条记录。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="font-family: 宋体;">那么如果没有约束条件就返回</span>
						<span style="" lang="EN">10</span>
						<span style="font-family: 宋体;">到</span>
						<span style="" lang="EN">29</span>
						<span style="font-family: 宋体;">行的记录。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt;">
				<font size="2">
						<span style="" lang="EN">
								<span style="">       </span>
						</span>
						<span style="font-family: 宋体;">那这跟避免全表扫描有什么关系呢？</span>
				</font>
				<font size="2">
						<span style="font-family: 宋体;">下面是</span>
						<span style="" lang="EN">MySQL </span>
						<span style="font-family: 宋体;">手册对</span>
						<span style="" lang="EN">Limit</span>
						<span style="font-family: 宋体;">参数优化扫描的一些说明：</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 21.75pt;">
				<font size="2">
						<span style="font-family: 宋体;">在一些情况中，当你使用</span>
						<span style="" lang="EN">LIMIT</span>
						<span style="font-family: 宋体;">选项而不是使用</span>
						<span style="" lang="EN">HAVING</span>
						<span style="font-family: 宋体;">时，</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">将以不同方式处理查询。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">如果你用</span>
						<span style="" lang="EN">LIMIT</span>
						<span style="font-family: 宋体;">只选择其中一部分行，当</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">一般会做完整的表扫描时，但在某些情况下会使用索引（跟</span>
						<span style="" lang="EN">ipart</span>
						<span style="font-family: 宋体;">有关）。</span>
						<span style="" lang="EN">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">如果你将</span>
						<span style="" lang="EN">LIMIT n</span>
						<span style="font-family: 宋体;">与</span>
						<span style="" lang="EN">ORDER BY</span>
						<span style="font-family: 宋体;">同时使用，在</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">找到了第一个符合条件的记录后，将结束排序而不是排序整个表。</span>
						<span style="">
								<span lang="EN">
										<o:p>
										</o:p>
								</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">当</span>
						<span style="" lang="EN">LIMIT n</span>
						<span style="font-family: 宋体;">和</span>
						<span style="" lang="EN">DISTINCT</span>
						<span style="font-family: 宋体;">同时使用时，</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">在找到一个记录后将停止查询。</span>
						<span style="">
								<span lang="EN">
										<o:p>
										</o:p>
								</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">某些情况下，</span>
						<span style="">
								<span lang="EN">GROUP BY</span>
						</span>
						<span style="font-family: 宋体;">能通过顺序读取键</span>
						<span style="" lang="EN">(</span>
						<span style="font-family: 宋体;">或在键上做排序</span>
						<span style="" lang="EN">)</span>
						<span style="font-family: 宋体;">来解决，并然后计算摘要直到键值改变。在这种情况下，</span>
						<span style="" lang="EN">LIMIT n</span>
						<span style="font-family: 宋体;">将不计算任何不必要的</span>
						<span style="" lang="EN">GROUP</span>
						<span style="font-family: 宋体;">。</span>
						<span style="">
								<span lang="EN">
										<o:p>
										</o:p>
								</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">当</span>
						<span style="" lang="EN">MySQL</span>
						<span style="font-family: 宋体;">完成发送第</span>
						<span style="" lang="EN">n</span>
						<span style="font-family: 宋体;">行到客户端，它将放弃余下的查询。</span>
						<span style="">
								<span lang="EN">
										<o:p>
										</o:p>
								</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">而</span>
						<span style="" lang="EN">LIMIT 0</span>
						<span style="font-family: 宋体;">选项总是快速返回一个空记录。这对检查查询并且得到结果列的列类型是有用的。</span>
						<span style="">
								<span lang="EN">
										<o:p>
										</o:p>
								</span>
						</span>
				</font>
		</p>
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt;">
				<font size="2">
						<span style="font-size: 9pt; font-family: Wingdings;" lang="EN">
								<span style="">l<span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">          </span></span>
						</span>
						<span style="font-family: 宋体;">临时表的大小使用</span>
						<span style="" lang="EN">LIMIT #</span>
						<span style="font-family: 宋体;">计算需要多少空间来解决查询。<br /></span>
						<span style="" lang="EN">
						</span>
				</font>
		</p>
		<font size="2">这里还有一些自己写的例子，明天再写上来……</font><img src ="http://www.blogjava.net/chenpengyi/aggbug/60679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2006-07-29 01:09 <a href="http://www.blogjava.net/chenpengyi/archive/2006/07/29/60679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Blizzard【暴雪】风云录【转载】——星际争霸、魔兽和暗黑缔造的奇迹</title><link>http://www.blogjava.net/chenpengyi/archive/2006/07/24/59902.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Mon, 24 Jul 2006 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/07/24/59902.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/59902.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/07/24/59902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/59902.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/59902.html</trackback:ping><description><![CDATA[<font size="2">
				<strong>在网上看了一篇关于Blizzard暴雪团队的文章，觉得不错，拉来给大家看看。<br />[引子]</strong>
				<br />
				<br />　　早饭后，弗兰克·罗伯兹像往常一样一路小跑的来到自己的邮箱前去收取自己的信件。这次他依旧是满载而归，顺手拆开了其中的一封，是一位出版商写给他的。 <br />　　“我知道也许我犯了错，也许是十年以来最大的错，但是，我仍然要拒绝你的作品。” <br />　　罗伯兹手里捏着这张信纸，茫然的站在院子中，他不知道还是不是应该拆开剩下的信，就像被相恋多年的女友突然之间抛弃在舞会上一样，罗伯兹的大脑不听使唤的僵在了那里，下面，该怎么办？ <br />　　这是一部花费了自己七年心血的作品，为了这部作品，他甚至花费了整整六年的时间去研究自己根本不曾接触过的阿拉伯文明。为了这部作品，他甚至还放弃了自己在大学中所学的专业。但是罗伯兹没有想到的是多年的辛劳换来的竟然是这样的结果，但是为了这部作品，他不能放弃。等待是需要耐心的，在等到第十三个出版商的时候，罗伯兹终于等到了自己想要的结果，他的作品出版了。 <br />　　这部作品就是日后风靡于欧美的科幻小说《沙丘魔堡》。但是罗伯兹更不会想到的是在四十年后，世界上的任何的一个人都能够随意的掌握他所创造出来的这个荒凉、神秘的外星世界。个中的缘由，还得让我们从八十年代说起。 <br /><br /><strong>[暴雪到来之前的故事]</strong><br /><br />　　拉斯维加斯，一个游戏金钱的地方，当150多年前美国摩门教徒们创建这所城市的时候他们也许根本就不会想到，就是这样一个建立在沙漠中的城市，最终会成为一个让全世界瞩目的地方。赌博的巨大刺激吸引着来自世界各地的人们来此一试手气，同样也吸引着世界各地的富商来此谋筹财路。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170731_82917.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">拉斯维加斯街景</font></font><br />　　一位名叫布莱特·W·斯帕里（Brett W Sperry）的年轻人就生活在这座城市之中，在被一家教育公司扫地出门之后，斯帕里开始了自己游荡的生活，最终，他凭借自己在计算机方面的特长，和一家名为Epyx的公司签订了合同，为他们开发一款名为《Dragonfire》的计算机游戏。但是穷困潦倒的斯帕里在工作的最后关头遇到了麻烦，在他需要为发行商打印最终成果的时候他发现就是拿出自己所有的积蓄也换不来一台最普通的打印机。 <br />　　他找到了自己的朋友，在“23世纪计算机”商店打工的路易斯·卡塞尔（Louis Castle）。这是一间内华达最古老的计算机商店，只有在这里你才能买到Macintosh。当时的卡塞尔拥有着一台点阵式的打印机，这就是斯帕里最需要的。接下来的时间里，他们开始了对未来的憧憬。他们常常花上很长的时间驾车去穿越内华达州的沙漠，来到加利福尼亚的Westwood市，这是他们最喜欢来的一座小城，在这里他们看电影、逛商场、闲坐在街边的咖啡馆里聊着各自感兴趣的话题。 <br />　　悠闲的时光很快就过去了，1985年的夏天，卡塞尔全家像每年一样，又开始动身前往Yosemite避暑，临行前，卡塞尔邀请斯帕里一同前去。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170801_79918.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　“我们自己开公司吧――五五分成。”斯帕里向毫无准备的卡塞尔说出了自己的想法，惊愕之余，卡塞尔最终还是被斯帕里说服了。斯帕里激动的冲向了街边的电话亭，他要同自己的东家Epyx公司做笔交易，他要用自己公司的名义为Epyx编制下一款游戏。 <br />　　公司总得有自己的名字。在枪毙了几个糟糕的名字之后，卡塞尔提议用“Westwood”来做公司的名称，因为那里给他们留下了太多的美好回忆，斯帕里在这个名字后面又加上了Associates，因为斯帕里感觉到他们要永远做一位伙伴，而不是雇员。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170821_18384.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　时间很快就过去了，转眼的时间，90年代到来了，在过去的五年中，卡塞尔和斯帕里带领着Westwood一刻不停的奋战着。除了少数的几款由自己设计的游戏之外，他们的日常工作几乎全部被移植游戏的工作占满。就这样在整个80年代他们都在移植中度过了，他们甚至自我解嘲似的说出了“我们移植一切，包括Bug”这样的名言。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170848_97404.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">Westwood的作品</font></font><br />　　1992年，Westwood决定让自己成为一间专业的游戏工作室，于是他们转而加盟了维真公司，在摆脱了发行和商务等等一系列的烦恼之后，Westwood开始了自己高速的发展历程。几款连续的成功作品让Westwood名声大振，但是也许就连Westwood也没有想到，下面的事情，将彻底的改变Westwood的命运，甚至改变整个PC游戏产业。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170907_32952.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">《沙丘Ⅱ》的游戏画面</font></font><br />　　文章的开头我们说到了罗伯兹的科幻小说《沙丘魔堡》，但是在40多年后的1992年，斯帕里和卡塞尔决定将它搬上计算机的屏幕。虽然在斯帕里的眼中，这只是一款小型的战争游戏，但是他们一刻也没有中止过为这款游戏添加新创意的想法，因为他们相信，人们有理由在这款游戏中获得足够多的乐趣。1992年的圣诞节马上就要到来了，卡塞尔和斯帕里决定在这个欢庆的节日中将自己的新游戏推到世人的面前，《沙丘Ⅱ》面世了。就仿佛在Pentium时代我们就见到了DOOMⅢ一样，当时的人们是无法用语言来描述自己对于《沙丘Ⅱ》的感觉的。在游戏中，我们俨然已经成为了一个万能的上帝，主宰着这个神秘的外星世界。斯帕里和卡塞尔对于界面的易用性和画面的完美性的追求在这款游戏中得到了充分的体现，但是也正是《沙丘Ⅱ》开创了一种全新的游戏类型——RTS（即时战略），这种全新的游戏模式将Westwood送上了巅峰，西木，一个响亮的名字开始在玩家中叫响。 <br /><br /><strong>[大树底下好乘凉]</strong><br /><br />　　九十年代的感觉是明亮和鲜艳的。 <br />　　加州大学洛杉矶分校的一间计算机教室中，一群大学生正在专心致志的摆弄着电脑。一个名叫艾伦·阿德汗(Allen Adham)的年轻人站了起来，他输入一串口令将自己的计算机锁住之后就离开了，但是5分钟之后，他仍旧没有回来，而此时早已过了系统规定的时间，计算机自动解锁了。坐在这台计算机旁边的一个学生注意到了这个情况，他偷偷的向艾伦的计算机中输入了一个全新的口令，然后就开始等待着一出好戏的上演。 <br />　　艾伦回来了，输入口令，登陆系统，一切无恙。这个替换了口令的学生坐不住了，他向艾伦询问是怎么进入了系统。 <br />　　“输入自己的密码不就进入了系统了吗。”艾伦不在意的耸了耸肩膀。 <br />　　“那你的密码是什么？” <br />　　“这个我可不能告诉你。”艾伦感觉这个人有点奇怪。 <br />　　“口令是JOE，对不对？” <br />　　艾伦吃了一惊，这个人怎么会知道自己的密码？一番解释之后，原来这个名叫迈克·莫怀米(Mike Morhaime)的学生输入的竟然也是JOE，他们选择了同样的口令。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722170958_52926.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　大学的时光总是过的很快，毕业的时间转瞬及至，此时的艾伦和迈克早已是形影不离的好友。在大学的这段时间里，艾伦已经开始为一些公司设计游戏，而迈克也逐渐被这些源代码的威力所吸引，大学毕业后，他们顺理成章的开始了自己的创业历程。 <br />　　在为任天堂的红白机设计了几款游戏之后，1991年，一个属于他们自己的公司Silicon &amp; Synapse(硅与神经键)公司成立了。但是就同Westwood一样，迈克和艾伦很快就决定枪毙这个名字，因为在他们看来，神经键是个什么东西？几乎没有人知道。Chaos，也许这个名字不错，但是麻烦接踵而至，因为早已有了一家拥有同样名字的公司。直到有一天迈克在翻字典的时候，Blizzard（暴雪）这个词跳入了他们的眼帘，几乎是瞬间的决定，从此Blizzard开始了自己辉煌的历程。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171323_45637.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　暴雪觉得自己应该做点什么了，在被著名的游戏发行公司Davidson &amp; Associates收购之后，艾伦和迈克所领导的暴雪已经完全成为了一间专业的游戏设计室。时间已经到了1994年，此时的Westwood已然如日中天，《沙丘Ⅱ》更是牢牢占据着全世界玩家的硬盘，暴雪悄悄的将目标锁定了。所有美好的事物总是经常被人模范，就像以前的赵老焉，就像现在的iPod，但是模仿似乎又是一件吃力不讨好的事，成功了自然流芳百世，失败了则不免遗臭万年，虽然如此，模仿者依然络绎不绝。艾伦和迈克发动了公司所有的15名员工，因为他们已经牢牢的掌握了《沙丘Ⅱ》的所有优点，同时也洞悉了它所有的缺点，暴雪的任务，就是将RTS这一概念完美完美再完美。 <br />　　外面的玩家已经有点不耐烦了，毕竟一个玩了两年的游戏已经很难再勾引起人们足够的兴趣了，他们急切的想体验沙丘之外的乐趣。暴雪是深知这一点的，因为暴雪的每个员工都是十足的游戏发烧友，而也正是因为这一点，他们才获得了在暴雪工作的机会。为了让玩家体验到完全新鲜的感受，暴雪决定将游戏的背景设定在一个奇幻的世界中，刀剑和魔法代替了飞机和大炮，漫天的黄沙也换成了葱郁的森林，暴雪也许根本就不会想到，艾泽拉斯的世界会如此的迷人。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171347_49027.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">《魔兽争霸》游戏画面</font></font><br />　　1994年的圣诞节即将到来了，Westwood的卡塞尔端坐在计算机前，屏幕上是一个他自己从来没有见过却又感到十分熟悉的游戏，这就是《魔兽争霸》。暴雪成功了，当时正在欧美流行的奇幻文学自然而然的将这款游戏带到了每一位玩家的家中，早已熟悉了沙丘的玩家很快就学会了如何来操纵这款游戏，因为他们在骨子里都是一样的。“当我第一次看到这款游戏的时候，它对我们产品的‘模仿’的确让我大吃一惊”，很多年之后卡塞尔是这样回忆当时的情景的。但是暴雪还是在《魔兽争霸》的身上打下了自己的烙印，联网对战模式、随机地图生成器、大量快捷键设定，《魔兽争霸》所带给玩家的这些全新感受无一不在指引着未来游戏的发展方向。 <br />　　三年前，Westwood还是一棵参天大树，漫无边际的向四周伸展着自己的枝叶，尽情享受着每一缕阳光。三年后，从自己根部汲取了足够多养分的暴雪已经冲破了那厚密的树冠，品尝到了第一缕阳光的味道。 <br /><br /><strong>[命令与征服]</strong><br /><br />　　成功后的艾伦和迈克开始将关注的目光越来越多的投向自己的对手，以希望在那里获得更多的经验和诀窍。但是他们却发现了一个自己根本不能容忍的问题，那就是相当数量的顶尖游戏设计师竟然根本不会玩游戏！“看到许多制作游戏的人根本不玩游戏真是让我大吃一惊，”日后成为暴雪重要领导人的Bill Roper这样说，“在面试中这种情况相当明显。我们将问应聘人最喜爱的游戏，那个游戏中他们最喜爱的角色，而且要进行深入的讨论。如果被接见者认为可以通过前一晚阅读最新的游戏杂志来增加他们头脑中的游戏知识，他们会发现这种方式绝对会适得其反。如果你告诉我们你最喜爱的游戏是街霸，我们就会想知道对于每个角色你喜爱的格斗招数。”直到现在，仍然有人在批评暴雪的这种做法让它丧失了很多顶尖的人才，“但是如果一个美工可以真正去思考他们的工作在游戏环境中的表现，那么这绝对是价值无法衡量的财富。”Roper这么解释。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171553_74301.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">Bill Roper</font></font><br />　　暴雪的成功是必然的，但是此时的Westwood却是需要倍加努力的时候。虽然斯帕里和卡塞尔在表面上说着希望暴雪成为一个伟大对手的客套话，但是在Westwood内部，一项工作正在有条不紊的进行着。因为Westwood也早已注意到玩家已经对《沙丘Ⅱ》感到厌烦了，他们急需一款全新的游戏来继续吸引玩家的注意力，只是《魔兽争霸》的问世让这种需要变的更加的迫切。 <br />　　斯帕里带领着自己的团队已经进入到了游戏开发的最后阶段。和《沙丘Ⅱ》那幻想中的世界不一样，这次斯帕里似乎要回到了现实的世界中，他要把当今世界的政治版图作出一个翻版来。这就是《命令与征服》（C&amp;C），一款让Westwood登峰造极的作品，一款让Westwood盛极而衰的游戏。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171641_69335.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　到了1995年年中的时候，《命令与征服》发布了。没有了幻想中的不切实际的武器，没有了令人倍感荒凉的外星世界，所有的兵种和建筑都复刻于我们的世界，一切都以我们身边的事物为原型，GDI和NOD双方的厮杀很快就让全世界的玩家沉浸在其中，Westwood也再一次向人们证明自己才是RTS领域的最强者。 <br />　　此时的暴雪一刻也没有停止工作，他们正在继续讲述着艾泽拉斯世界中的故事，但是他们万万没有想到，一个更加古怪的念头正在斯帕里的脑海中逐渐成形：他想把二战中的场景搬上计算机的屏幕，恐怖、残酷、杀戮，战争中所有最糟糕的一面都将得到展现。但是他这个念头很快就得到了维真公司的否定，原因只有一个：这款游戏最终将面向全世界发行。此时斯帕里才恍然大悟，在他的设想中，游戏已经涉及了太多的政治敏感话题，单单描写德军的情节，就别想让这部作品在德国发行。 <br />　　《命令与征服》的成功让Westwood充满了空前的自信，斯帕里决定继续之前的古怪念头，为《命令与征服》推出资料片，背景依然是现实中的世界，但是游戏的主角，却已然换成现实中的国家。1995年的圣诞节即将到来了，此时的游戏销售排行榜上，《命令与征服》已经遥遥领先于其他的任何游戏。如果此时的暴雪消沉下去，那么Westwood的下一款游戏也许就会让玩家永远的忘记暴雪这个名字。暴雪提前采取了行动，已经悄悄开发了十个月之久的《魔兽争霸Ⅱ》如期上市了。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171709_82965.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　市场是检验一款游戏成功与否的最佳标准。仅仅使用了十个月就完成的《魔兽争霸Ⅱ》在技术上不但支持了高分辨率图形，更是在游戏中加入了支持8玩家局域网对战的功能。但是一款游戏如果仅仅只是拥有技术上的优势是远远不够的，首先必须是一名游戏爱好者的聘用政策让暴雪能够更多的照顾玩家的游戏感受。战争迷雾，左键选择单位、右键点击移动，这两个看似不起眼的小改动不但确立了暴雪今后游戏的操作风格，更是成为了大多数RTS游戏所遵循的操作标准。不仅仅只是这些，暴雪开始在这款游戏中注意游戏本身的平衡性，各个种族之间绝对的公平保证了游戏自身的可玩性，各种各样的战术开始被创造出来，以最大限度的利用种族的自身优势。很快，《魔兽争霸Ⅱ》的销量奇迹般的突破了一百万套，而暴雪，也开始了自己的蜕变。 <br />　　《魔兽争霸Ⅱ》的成功极大的刺激了Westwood，虽然此时C&amp;C仍然占据着游戏排行榜的第一位，但是如日中天的Westwood对于暴雪将自己的风头抢去是难以容忍的。斯帕里的构思终于变成了现实，1996年中的时候，《红色警报》发布了。作为C&amp;C的资料片，人们吃惊的发现《红警》竟然从头到脚几乎有90%的内容是全新的，由此看见Westwood对于这款游戏的态度。Westwood打出了一张好牌，由于当时Windows95的发布，一场Windows的风潮席卷全球，于是Westwood率先推出了Windows版本的《红警》，为后来的迅速蹿红埋下了伏笔。相比于奇幻中的世界，现实中的故事更能引起人们的兴趣。以冷战为背景，玩家可以操作美苏两个超级大国中的任意一方来完成自己称霸世界的雄心，游戏不但有着强烈的真实感，完善的联网对战功能更是让玩家的兴趣大增。其实我们已经毋需多言了，相信每一个经历过那个时代的玩家都会对那段时光深有体会。不论我们走进哪一家网吧，或是哪一家电脑游戏室，首先听到的几乎都会是厮杀于红警中的玩家的喊叫。记得有人曾经说过，红警定将为21世纪培养出一批合格的将军。Westwood最为辉煌的时刻就这样到来了，但是斯帕里和卡塞尔没有想到的是，对于游戏性理解的偏差和随之而来的急功近利让Westwood走入了歧途，并渐行渐远，直至再也没有找回最初的方向。 <br /><br /><strong>[中世纪的幻想]</strong><br /><br />　　这是一件只有极少数玩家知道的事情。在1994年的芝加哥消费电子产品展上，阿德汗结识了Condor公司，共同的游戏理念很快就让两家公司走到了一起。在经过几个月的初步设计之后，Condor的三位创始人Max Schaefer、Dave Brevet和Erich提出了动作RPG游戏的概念。新生的事物总是很难被世人接受的，他们的概念遭了绝大多数游戏发行公司的冷遇。无奈之下，Dave拨通了阿德汗的电话，暴雪也许是他们最后的知音了。相同的设计哲学很快就让他们达成了共识，“我们都热爱中世纪的东西、剑、怪物、财宝等等，”Dave说道“你只会感觉到这种结果太合适了。”1995年1月份，暴雪和Condor达成了制作一款全新游戏的协定，暴雪为Condor提供30万美元的开发资金，Condor将全权负责这款游戏的开发，这款游戏就是《暗黑破坏神》，一款日后每一个暴雪人都深深迷恋的作品。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171840_10488.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">《暗黑破坏神》的关卡设计师</font></font><br />　　多年以后，Dave承认当时暴雪所提供的30万美元是难以满足《暗黑破坏神》的开发需要的，因为绝大多数的Condor员工都投入到了这款游戏的开发之中。幸好当时另外一家游戏厂商3DO正在让Condor为他们的新主机开发一款游戏，于是Condor就暗自挪动了3DO为他们提供的开发款项，就这样，3DO就在自己毫不知情的情况下间接支持了《暗黑破坏神》的开发。 <br />　　就在Condor在预算不足的情况下为完成《暗黑破坏神》而努力工作的时候，暴雪的开发团队已经在开发《魔兽争霸Ⅱ》之余，注意到了这款游戏所采用的回合制游戏方式。几乎是凭借作为一名游戏玩家的直觉，他们就感觉到即时制能让玩家体会到更多的游戏乐趣。长时间的争论自然是难免的，但是暴雪的开发团队通过不断的向Condor施压，最终让他们改变了想法。三个小时后，即时制的《暗黑破坏神》运行在了Condor开发小组的计算机上，一切都变的流畅了起来，畅快的游戏感受让Condor小组的成员不得不承认，也许这是《暗黑破坏神》在开发过程中遇到的最棒的事情。 <br />　　此时的媒体终于开始注意到暴雪和Condor正在开发的这款游戏，暴雪将要涉足RPG领域的消息开始在玩家中不胫而走。暴雪似乎意识到了《暗黑破坏神》对自己的重要性，而Condor卓越的才能更是让暴雪钦佩不已，更何况此时的暴雪和Condor在感情上已经如一家兄弟。虽然有更多的发行商愿意出更高的价钱来收购Condor，但是Max和Dave最终还是带领着Condor走到了暴雪的身边。于是在1996年3月，Condor成为了Blizzard North，北美暴雪成立了。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172726_28404.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">Max和Dave沉醉于暗黑破坏神中，墙上是象征荣誉的“五年之剑”</font></font><br />　　北美暴雪的成立进一步加快了《暗黑破坏神》的开发计划，圣诞节前发行已经成为可能。暴雪的开发团队开始考虑《魔兽争霸Ⅱ》之后的作品了，虽然《魔兽争霸Ⅱ》让暴雪成为了一家足以抗衡Westwood的公司，但是此时的RTS代名词却是C&amp;C和红警。“我们想暂时抛弃魔兽系列，并寻求一个新的突破，每个人似乎都在想着做一款科幻游戏”，Bill roper这样回忆着当时的情景。 <br />　　《暗黑破坏神》的开发已经进入了尾声。1996年的E3大展到来了，此时的暴雪已经成为和Westwood、id Software一样的厂商，他们是所有人都像击败的目标。暴雪动用了三套系统来展示自己的作品《暗黑破坏神》，但是这似乎远远不能应付玩家对于它的热情，到了展会的后期，演示的系统不得一再添加，直至占用了暴雪所有六套系统中的五套。一个更加令人兴奋的消息传来了，暴雪宣布将在《暗黑破坏神》中附带一个名为Battle.net的免费互联网游戏服务，战网问世了。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172812_54321.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　1996年的圣诞节到来了，商店的货架上却看不到《暗黑破坏神》的踪影，暴雪的承诺没有兑现。而此时在暴雪的内部，熬红了双眼的Max和Dave正在带领着手下的员工们为最后加入的Battle.net做出最后的努力，这一切都是为了达到玩家和自己为游戏设定的双重标准。1997年来到了，《暗黑破坏神》终于压盘上市了，玩家们的热情是不可抵挡的，短短18天内，《暗黑破坏神》的销量突破了一百万套，暴雪对完美的追求再次得到了丰厚的回报。 <br /><br /><strong>[我的征途是星辰大海]</strong><br /><br />　　1996年的E3大展造就了《暗黑破坏神》的成功，同时也造就了另外一个悲情英雄《星际争霸》。在暴雪使用的六套展示系统中，有三套用来展示《暗黑破坏神》，另外三套展示的，就是Bill roper口中的“每个人都想制作的科幻游戏”《星际争霸》。但是玩家对《暗黑破坏神》的热情和对《星际争霸》的冷遇形成了鲜明的对比，最终《星际争霸》的展示平台被剥夺到了一套，暴雪似乎将要推出自己第一款失败的作品了。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722171943_94072.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　是继续开发，还是重头再来，抑或是就此取消，E3归来后的《星际争霸》面临着一个艰难的选择。紧接着到来的1997年给予了暴雪足够的动力去作出最为艰难的选择，《暗黑破坏神》的成功让暴雪明白了优秀与伟大之间的区别。最终，暴雪选择了最为漫长和痛苦的道路，《星际争霸》从头再来。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172007_17624.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">最初的《星际争霸》游戏画面</font></font><br />　　当莫怀米在2000年接受一家杂志的采访时曾经承认，《星际争霸》确实是他们“最漫长和最痛苦的一个”，但是暴雪制作一款伟大游戏的决心却从来没有改变过。之前的《星际争霸》最终只保留了种族的设定，其余的设计被全部抛弃。经过半年多的重新设计之后，全新的图形引擎和渲染影片终于被设计出来，第一个测试版的《星际争霸》即将出炉。任何人在回忆起这段时光的时候总是能够记起《星际争霸》战役编辑器的设计师Jeff Strain和他的太太Annie Strain。 <br />　　“当时我在检查了自己的笔记本电脑之后，就飞奔似的回家了，因为我的太太已经怀孕9个多月，她已经开始产前的痉挛了。”Jeff自己这样回忆到，那个时候全公司都在加班加点以赶在节假期前推出《星际争霸》，但是妻子的电话不得不让Jeff在最后的关头离开自己的工作岗位。“你要知道，在妻子痉挛真正开始之前我在医院完成了5到6个小时的编程工作。”当Annie从产前的麻醉状态中苏醒过来的时候，Jeff正在将自己的手从键盘上拿开。 <br />　　“在我们女儿出生的时候你还在为这个该死的游戏工作吗？”Annie似乎有些愤怒。 <br />　　“Annie，这可不是'该死的游戏'。它是Star Craft！”Jeff解释到。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172041_64980.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　<font color="#660066"><font style="FONT-SIZE: 12px">可爱的Jeff Strai</font></font><br />　　尽管多年后Jeff已经离开了暴雪，并同其它从暴雪离开的同事共同创立了Arena.net，但是Jeff仍然对自己妻子的评语感到“耿耿于怀”，也许正像Bill roper所说的那样“让我们回到工作室坚持下去的动力是制作伟大游戏作品的机会。” <br />　　整整三个月的时间，暴雪的所有人员都放下了手中的工作，全力进行《星际争霸》的测试工作。虽然所有的设计师发疯了似的工作着，但是当1997年的圣诞节到来的时候，暴雪还是宣布《星际争霸》需要推迟了，三年来，暴雪第一次没有在新年的时候推出自己的作品。但是暴雪却并没有这样看，“公司的每个人都知道只需几个令人失望的游戏就会毁掉我们所有的声望。”星际争霸的总设计师Bob Fitch后来回忆到，看起来他似乎有点心有余悸。但是此时的暴雪内部却并没有出现任何的差错，一切都在按部就班的进行，重新调整过后的游戏在种族的平衡性上取得了长足的进步，因为暴雪不想学Westwood那样让自己的游戏变成疯狂的坦克大战。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172118_76836.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　1998年3月，当《星际争霸》终于摆上了商店货架的时候，所有的结果都证明了暴雪在96’E3大展后作出的决定是如何的正确。仅仅在发行当月《星际争霸》就冲上了游戏销售排行榜的首位，而在韩国，星际的销量更是很快的就突破了一百万份。但是有谁能够知道，在星际大获成功的背后，却有着另外一个游戏的凄凉结局。这个游戏就是Roper宠爱的Warcraft Adventures，它讲述了萨尔的故事，在Warcraft II结局中人类封闭了通向德拉诺的入口，随后萨尔被抓到了艾泽拉斯。虽然这是暴雪第一款采用3D引擎的游戏，虽然不少的玩家和媒体都非常看好这款游戏，但是在暴雪内部却始终认为这部作品将会是他们第一款销量达不到百万级别的作品，最终暴雪还是在98年E3大展到来前宣布Warcraft Adventures被无限期推迟。 <br />　　看着自己的同事们一直拼杀在游戏设计的第一线，此时早已是公司总裁的阿德汗再也坐不住了，抑止不住的创作激情让他毅然放弃了自己的职务，转而投入到了真正的游戏开发中去。但是此时在暴雪的内部，也许没有一个人会想到《星际争霸》会产生怎样的蜕变。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172140_72375.gif" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　Battle.net战网，相信如果没有它的存在，星际也许只会安静的待在每一个玩家的硬盘上，但是正式因为战网的存在，才让全世界的玩家走到了一起。在星际最初发行的版本中，不论是暴雪还是玩家，星际的概念对于他们来说还仅仅只是一款游戏。但是到了资料片《母巢之战》发行的时候，游戏，这个被无数的家长视为洪水猛兽的科技怪物终于在星际的带领下走进了现代竞技体育的殿堂。也许家长们无法理解当每一个痴迷于星际的孩子在看到GRRR用几乎闻所未闻的克隆手法让9个小飞机在瞬间逐个撞杀OCTOBER的2个吞噬者和5条飞龙，让己方遭到缓速魔法袭击的飞龙群反败为胜的时候，他们会是一种什么样的心情。“微操作”、“大局观”、“战术”等等开始流行了起来。1.08版所重新调整的种族平衡让星际向竞技体育更加的靠拢，而游戏录像功能的推出则让更多的玩家能够在第一时间看到世界顶尖高手们的风采。而此后暴雪每次推出新的游戏版本，全世界的玩家立刻就能研究出无数的战术和绚丽的打法。 <br />　　2001年9月5日的韩国汉城。 <br />　　暴雪不应忘记这一天，电子竞技不应该忘记这一天，每一个星际玩家更不应该忘记这一天，历史上第一次电子竞技大赛WCG开幕了。林耀焕，一个曾经两次参加考高而未曾中的的高中生，一个在星际的世界中名叫Slayers_BoxeR的年轻人，是他在比赛中让《星际争霸》得到了升华，是他让人们重新认识了《星际争霸》这款暴雪3年前推出的作品。当一整队的机甲巨人从多架运输机上从天而降的时候，人们根本不相信这是人力所能达到的，BoxeR做到了。高阶空投，机械化打法，三基地战术等等一系列的创新被BoxeR源源不断的创造了出来，而2002年WCG决赛中的那场璀璨对决，更让BoxeR无愧于最伟大的星际选手的称号。也正是这样的创新精神，让《星际争霸》一次又一次的升华，成为了真正意义上的一种文化，成为了一种创新的精神。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172203_17438.gif" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">酷酷的BoxeR的海报</font></font><br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172219_17521.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">星际双打冠军！WCG赛场上飘扬的五星红旗</font></font><br />　　2005年，在暴雪推出《星际争霸》7年之后，最新版本的1.12版发布了，这似乎向人们预示着，《星际争霸》的魅力是永恒的，也许有关星际的话题仍将继续下去…… <br /><br /><strong>[走向冰峰王座]</strong><br /><br />　　让我们再次回到1997年。当《暗黑破坏神》在市场上获得了巨大的成功的时候，暴雪的母公司Davidson就急切的希望北美暴雪能够在那一年的暑期推出它的续篇，但是这个计划马上就被Dave否定了，因为在他们看来，《暗黑破坏神》是唯一的。在经过一个月的休假之后，北美暴雪的全体成员坐在了一起，下一部作品应该是什么呢？“《暗黑破坏神Ⅱ》！”，人们几乎异口同声的说出了自己的想法。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172257_58143.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">站在暴雪总部门前的莫怀米</font></font><br />　　两年后，《暗黑破坏神Ⅱ》依旧在继续进行着自己的开发。因为在开发临近尾声的时候加入的一些全新特性如关卡零载入时间、角色特色技能树等让Dave他们的开发团队不得不重新开始大量的工作。而在距他们500英里之遥的暴雪开发团队此时也遇到了棘手的问题，阿德汗领导的开发小组决定继续讲述艾泽拉斯的故事，只是这次他们将第一次使用全3D引擎，而且阿德汗还希望完全改变RTS的游戏风格，使之看起来更像是一款RPG游戏。 <br />　　时间到了1999年，在这一年9月份在伦敦举办的欧洲计算机贸易大会上，暴雪首次向外界披露了《魔兽争霸Ⅲ》的消息，并进一步向外界透露了《暗黑破坏神Ⅱ》的开发情况，并且明确的表示《暗黑破坏神Ⅱ》肯定会在年内发布。但是情况却恰恰与之相反，这款从1997年就开始进行开发的游戏竟然在两年之后依然有大量的工作需要完成。新的创意和特点被不断的添加进去，“每当早上我走进办公室对大家说我有一个更好的想法的时候，几乎每个人都忍不住的呻吟起来，因为他们知道这又意味着三个月的没日没夜。”Dave回忆起当时的情景。1999年的圣诞很快就到来了，但是《暗黑破坏神Ⅱ》的开发进度似乎没有一点的进展，虽然他们从4月份以来就再也没有休息过一天。像之前的游戏一样，暴雪再一次宣布新游戏将无法按时发布了。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172337_15823.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">《暗黑破坏神》开发小组全家福</font></font><br />　　随着新年的到来，玩家们对暴雪的期望也空前的高涨了起来，因为他们知道暴雪肯定会在新的世纪中为大家带来两款众人期盼已久的作品。Dave和Max知道自己的作品无论如何都要在年中的时候完成了，当然这也意味着他们将在超过一年的时间里得不到任何休息的时间。而此时在暴雪的开发小组所遇到的问题似乎有着更大的麻烦，因为已经在开发中的《魔兽争霸Ⅲ》有可能重蹈最初版本《星际争霸》的命运，也许它要被全盘否定了。玩家对于《魔兽争霸Ⅲ》的看法分成了两派，所有喜欢暗黑破坏神的玩家几乎都在反对将RPG的元素添加到魔兽争霸中，而所有喜欢魔兽的玩家却几乎一致的支持这项决定，暴雪陷入了两难的境地。“小组的每个人看了这个游戏都说，你要知道，这种效果并不怎么样。我们需要做一些事情了”，作为暴雪领导人之一的Rob Pardo日后这样回忆说。在让《魔兽争霸Ⅲ》重新回到制图板上之后，大量的RPG元素被取消了，只能跟随英雄的视角设定被否决了，自由卷屏重新回到了游戏中来，一切都回到了RTS游戏的根源。 <br />　　玩家们对于这样的结果自然是不能满足的，已经习惯了暴雪的创新风格的忠实玩家开始诉说着自己的不满，因为这在他们看来这是暴雪在为保证自己游戏的销量而不敢承担创新的风险。“如果你开始认为你不能承担太多风险，而肯定可以创造出顶尖作品的唯一方式是重复以前游戏的成功路线，那么我认为压力很可能真的会抑制创造性。”已经离开暴雪的Jeff Strain似乎也在承认着暴雪当初的想法。但是Bill Roper却不这么认为，“我们希望Warcraft II到Starcraft或者Diablo到Diablo II之间的衍变显示了我们能够创作出有趣、为玩家熟悉、并且具有全新体验的游戏。”也许Roper的话是对的，因为接下来的事情再一次证实了暴雪的成功。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172423_92794.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　2000年6月份，经过两年多开发的《暗黑破坏神Ⅱ》终于发布了，发行当天高达184000份的销量足以显示玩家对于暴雪的疯狂，而不足一个月的时间就创下了百万份的销量更是创造了一个新的记录。 <br />　　第二年的6月份，北美暴雪再次为大家带来了新的惊喜，《暗黑破坏神Ⅱ》资料片《毁灭之王》发布了，但是更大的惊喜却还在后面。9月，参加欧洲计算机贸易大展的暴雪宣布了《魔兽世界》的存在，一扇通向艾泽拉斯世界的大门正在向全世界的玩家缓缓开启。 <br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172442_28029.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　此时的《魔兽争霸Ⅲ》开发小组的工作也终于接近了尾声，三年磨一剑，Roper口中的“史诗级”概念在《魔兽争霸Ⅲ》的身上得到了淋漓尽致的体现。2002年7月，人们第一次见到了“英雄”在RTS游戏中起到了如此重要的作用，3C、TD、熊猫，暴雪驾驭游戏的能力再一次得到了完美的体现。2002年底的时候，《魔兽争霸Ⅲ》不负众望的登上了各大游戏排行榜的首位，暴雪重现了当年Westwood的辉煌。 <br />　　资料片的发行一直的暴雪的传统，就像星际争霸的母巢之战，就像暗黑破坏神的毁灭之王，每一次暴雪资料片的发行总是能够让人重现认识一款游戏并将自己对它的热情持之以恒。《魔兽争霸Ⅲ》也不例外，就在游戏发布后不久，暴雪决定继续讲述艾泽拉斯的故事，一款新的资料片即将发布。 <br />　　但是事情并非总是那么一帆风顺，暴雪的母公司威望迪此时的一个决定震动了暴雪上下和整个游戏界。为了偿还债务，威望迪有可能将自己名下的游戏制作部门进行出售，当然这也包括暴雪。面对这一景况，首先出现波动的是北美暴雪，这个开发了《暗黑破坏神》系列的团队。最终，曾经引领着Condor投入暴雪怀抱的Erich Schaefer、Max Schaefer、David Brevik重新离开了暴雪，随着他们一同出走的，还有暴雪的副总裁，一个游戏制作的全才Bill Roper。 <br />　　但是此时的暴雪并没有轰然倒地，早已成长为能够同时进行两款伟大游戏开发的暴雪在外界看来似乎并没有收到什么影响。就在北美暴雪高层集体辞职之后的第二天，2003年7月1日，《冰峰王座》准时来到了玩家的面前，暴雪仍然在继续着自己的创新与辉煌。 <br /><br /><strong>[新的开始]</strong><br /><br />　　<img alt="网友贴图" hspace="5" src="http://hardware.mydrivers.com/pages/images/20050722172529_79430.jpg" onload="javascript:if(this.width&gt;620)this.style.width=620" vspace="5" border="0" /><br />　　　　　　　<font color="#660066"><font style="FONT-SIZE: 12px">我终于站在了暴风城的大门前</font></font><br />　　十多年来，人们每每俯瞰着美丽的艾泽拉斯世界，却从来不得以进入其中，今天，暴雪将这一切都变成了显示。但我睁开双眼第一次看到北郡修道院的时候，一切都使我感觉到那么的熟悉，就是在这里，人类的********迪文度过了自己的童年和少年时光，但是就在德拉诺的兽人在萨格拉斯和他的部下基尔加丹的影响下变得狂暴而残忍的时候，麦迪文也完全被萨格拉斯掌控了，一条连接德拉诺和艾泽拉斯的时空之门被打通，狂暴的兽人很快席卷了整个艾泽拉斯的大陆。 <br />　　历尽千辛，人类终于在兽人的残暴下存活了，而得到了神器的兽人也暂时回到了德拉诺的世界中，但是下一次的入侵似乎将很快就会来到。为了让艾泽拉斯的世界获得永久的和平，图拉扬将军，********德加以及来自高等精灵的艾蕾莉亚·风行者、来自矮人的库德兰·蛮锤和勇猛的战士纳斯·托尔贝恩率领着人类的远征军开向了地狱般的德拉诺兽人世界。浴血奋战，战斗在德拉诺的联盟勇士们最终明白，只有摧毁通向艾泽拉斯的传送门才是确保联盟和平的唯一办法。一声巨响过后，联盟的战士们永远的留在了德拉诺的红色世界中，直至今日，依然没有他们的任何消息。也许他们仍然在继续着同兽人的激战，也许他们仍在在寻找着回家的道路，也许他们已经在天国的阶梯上俯瞰着美丽的艾泽拉斯世界。 <br />　　我凝望着伫立在暴风城门口的雕像，回想着在这个美丽的世界中曾经所发生的点点滴滴，遏制不住的激情开始在胸中回荡，心中禁不住想起了库德兰·蛮锤雕像座下的那段话： <br />　　“听吧，风中传来狮鹫的呼号，战锤的声音回荡在山间。勇敢的面对困境吧，我的兄弟，祖先的圣堂在向你召唤。” <br />　　也许，这就是积淀了十年的激情！ <br />　　也许，这就是暴雪的力量！<br />【原文地址】 <a href="http://bbs.qq.com/cgi-bin/bbs/show/content?club=3&amp;groupid=146:10557&amp;messageid=6249" target="_blank"><font color="#000000">http://bbs.qq.com/cgi-bin/bbs/show/content?club=3&amp;groupid=146:10557&amp;messageid=6249</font></a></font><img src ="http://www.blogjava.net/chenpengyi/aggbug/59902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2006-07-24 23:23 <a href="http://www.blogjava.net/chenpengyi/archive/2006/07/24/59902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL宣布进入微软产业合作伙伴计划，是献媚还是图谋微软的市场？</title><link>http://www.blogjava.net/chenpengyi/archive/2006/07/12/57729.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Tue, 11 Jul 2006 16:39:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/07/12/57729.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/57729.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/07/12/57729.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/57729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/57729.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">众所周知，</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一直是开源领域数据库的佼佼者，也是</span>
						<span lang="EN-US">LAMP</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">组合中的重要成员，正是因为有了它才有了这个</span>
						<span lang="EN-US">Linux</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下的金牌开源组合。更重要的是，在开发者领域，</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也一直是</span>
						<span lang="EN-US">Java</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US">PHP/Perl</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序开发人员的好伙伴，在我们的感觉中，</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">似乎已经成为开源社区对抗微软最佳武器。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而最近，</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发者网络突然传出信息，</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在上个月的</span>
						<span lang="EN-US">27</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">号在伦敦加入了微软的</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的产业合作伙伴计划，当然我们知道这些</span>
						<span lang="EN-US">so-called</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">“合作伙伴计划”不代表什么，也并不意味着从此</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就专注于与</span>
						<span lang="EN-US">MS Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之间的合作而减少与开源社区的合作。</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">放弃开源社区肯定是不会的，因为</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是依靠着开源社区发展起来的，不可能因为</span>
						<span lang="EN-US">MS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的强大就放弃了自己的本行，同时由于</span>
						<span lang="EN-US">MS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有自己的强大的数据库产品——</span>
						<span lang="EN-US">SQL Server 2005</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
						<span lang="EN-US">MySQL AB</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是不会放弃自己的本行转投微软门下的。（我也看到了在国外的论坛上有某些程序员也有担心微软会变相收购</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的说法，我想暂时是不可能了，因为</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在的投资者都是微软的死对头）</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以我觉得这绝对不是对微软的妥协或是求和，无论对开源社区或是使用</span>
						<span lang="EN-US">MS Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列产品的</span>
						<span lang="EN-US">ISVs</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">都是好事，但对微软而言，就不会是好事了。因为现在</span>
						<span lang="EN-US">MS SQL Server</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">系列产品的用户大部分是中小企业（说得不好听点，在国内大部分使用的都是</span>
						<span lang="EN-US">D</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版的），而且很多小型企业没有购买</span>
						<span lang="EN-US">Oracle</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
						<span lang="EN-US">DB2</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的意愿（什么原因？贵呗），为了减少企业的</span>
						<span lang="EN-US">TCO</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（总拥有成本），选择</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为开发工具还是很正确的，</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然是需要购买的，但一次成本、短期支出而已，但</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发人员的成本低，维护费用也低，这是长期的指出减少，也就是企业的收益，把这两个算起来，选择</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">就是肯定的了（这点希望大家就别跟我争了，看看</span>
						<span lang="EN-US">ASP</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员的薪水，再看看</span>
						<span lang="EN-US">Java</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员薪水，然后看看</span>
						<span lang="EN-US">ASP</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序和</span>
						<span lang="EN-US">JSP</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序维护难度）。但是在</span>
						<span lang="EN-US">Visual Studio</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">平台上一直没有一个跟开发平台整合得比较好的开源</span>
						<span lang="EN-US">Database</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（也许有，但我还不知道），所以很多</span>
						<span lang="EN-US">VS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发平台上的人只好无奈的选择</span>
						<span lang="EN-US">Access</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
						<span lang="EN-US">SQL Server</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但如果</span>
						<span lang="EN-US">.Net</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发人员能跟</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和顺利的打上交道，然后可以很方便的使用</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行数据库开发，我想这些</span>
						<span lang="EN-US">.Net</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的开发人员也就不会再高价使用</span>
						<span lang="EN-US">MS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的产品了。虽然能看到现在的现实是</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的易用性还是不足，但自</span>
						<span lang="EN-US">5.0</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本以来，它的改变也是相当大的，从数据库性能和数据库特性提升，到方便开发人员开发调试的</span>
						<span lang="EN-US">MySQL Query Browser</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，再到提升数据库管理效率的</span>
						<span lang="EN-US">MySQL Administrator</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，我们已经看得到</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的进步了，这个时候它再宣布进入微软的开发者领域，无疑就是希望从微软口中分一杯羹，把这部分非</span>
						<span lang="EN-US">MS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">忠实</span>
						<span lang="EN-US">Fans</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的用户抢过来，它进入微软开发者领域对</span>
						<span lang="EN-US">SQL Server</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来说无疑是一场冲击。</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">十分期待它能从</span>
						<span lang="EN-US">MS</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">口中抢来更多的</span>
						<span lang="EN-US">SQL Server</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的市场份额。同时</span>
						<span lang="EN-US">MySQL</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也新推出了支持</span>
						<span lang="EN-US">.Net</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的编程的</span>
						<span lang="EN-US">Connector</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，专门为</span>
						<span lang="EN-US">.Net Framework</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的数据库连接桥，</span>
						<span lang="EN-US">.Net</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的用户可以去试试看，是不是比以前的</span>
						<span lang="EN-US">ODBC Driver</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">快捷稳定。</span>
				</font>
		</p><img src ="http://www.blogjava.net/chenpengyi/aggbug/57729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2006-07-12 00:39 <a href="http://www.blogjava.net/chenpengyi/archive/2006/07/12/57729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL 5.1 提供XML内置支持(XPath)</title><link>http://www.blogjava.net/chenpengyi/archive/2006/07/11/57578.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Mon, 10 Jul 2006 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/07/11/57578.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/57578.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/07/11/57578.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/57578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/57578.html</trackback:ping><description><![CDATA[<font size="2">前些天说到了MySQL5提供了内置的XML文件解析和修改函数，今天找了点MySQL网站上的资料和例子，翻译了一下，希望能给使用数据库存储XML和XSLT的同志一些帮助。<br />MySQL 5.1.5版本中添加了对XML文档进行查询和修改的函数，分别是ExtractValue()和UpdateXML()，下面是这两个函数的使用示例：<br />还是一样我们首先建立一个示例数据库，然后将范例中使用的XML文档输入到数据库中：<br />CREATE TABLE x (doc VARCHAR(150));<br />INSERT INTO x VALUES<br />('<br />&lt;book&gt;<br />&lt;title&gt;A guide to the SQL standard&lt;/title&gt;<br />&lt;author&gt;<br />&lt;initial&gt;CJ&lt;/initial&gt;<br />&lt;surname&gt;Date&lt;/surname&gt;<br />&lt;/author&gt;<br />&lt;/book&gt;<br />');<br />INSERT INTO x VALUES<br />('<br />&lt;book&gt;<br />&lt;title&gt;SQL:1999&lt;/title&gt;<br />&lt;author&gt;<br />&lt;initial&gt;J&lt;/initial&gt;<br />&lt;surname&gt;Melton&lt;/surname&gt;<br />&lt;/author&gt;<br />&lt;/book&gt;<br />');<br />大家可以看到，doc列的内容中包含了自己的层次结构，以XML格式体现包含书名和作者的书本，其中作者还包含名字简写大写以及姓。这是流行的排版和储存格式，字母"&lt;book&gt;" 和&lt;/book&gt;"是标记，使用户更容易理解内部的层次结构。<br />下面先看看ExtractValue()的用法吧<br />语法：<br />EXTRACTVALUE (XML_document, XPath_string); <br />第一个参数：XML_document是String格式，为XML文档对象的名称，文中为Doc<br />第二个参数：XPath_string (Xpath格式的字符串) ，如果不了解Xpath语法，可以在网上查找教程。<br />作用：从目标XML中返回包含所查询值的字符串<br />示例#E1：<br />mysql&gt; SELECT EXTRACTVALUE(doc,'/book/author/initial') FROM x;<br />+------------------------------------------+<br />| EXTRACTVALUE(doc,'/book/author/initial') |<br />+------------------------------------------+<br />| CJ |<br />| J |<br />+------------------------------------------+<br />2 rows in set (0.01 sec)<br />可以看到，EXTRACTVALUE()函数将/book/author/initial节点中的值取出来，并通过Select返回。因此需要简单的查找XML文档中的值，只要在XPath_string参数中指定好层次和节点就行了。<br />示例#E2<br />mysql&gt; SELECT EXTRACTVALUE(doc,'/*/*/initial') FROM x;<br />+----------------------------------+<br />| EXTRACTVALUE(doc,'/*/*/initial') |<br />+----------------------------------+<br />| CJ |<br />| J |<br />+----------------------------------+<br />2 rows in set (0.01 sec)<br />如果查询前并不知道层次关系，你也可以使用通配符进行层次的匹配，不过当XML文档比较大的时候查找速度会很慢滴。<br />示例#E3<br />mysql&gt; SELECT extractValue(doc,'/book/child::*') FROM x;<br />+---------------------------------------------+<br />| extractValue(doc,'/book/child::*') |<br />+---------------------------------------------+<br />| A guide to the SQL standard |<br />| SQL:1999 |<br />+---------------------------------------------+<br />2 rows in set (0.00 sec)<br />使用/book/child::语句我们可以找到Book节点下的首个节点，文中是title。除了child以外，我们还有其他的参数：<br />child ... 指定节点的下一子节点）<br />descendant ... 节点下包含的所有层次中的数据<br />parent ... 指定节点的上一节点<br />ancestor ... 节点以上所有层次的数据<br />following-sibling ... 同一层次的下一个节点<br />preceding-sibling ... 同一层次的上一个节点<br />self ... 自身<br />示例#E4<br />mysql&gt; select<br />extractValue(doc,'/book/author/surname[self:text()="Date"]') from x;<br />+--------------------------------------------------------------+<br />| extractValue(doc,'/book/author/surname[self:text()="Date"]') |<br />+--------------------------------------------------------------+<br />| Date |<br />| |<br />+--------------------------------------------------------------+<br />2 rows in set (0.00 sec)<br />这里是一个使用条件表达式进行数据查找的例子，具体就不解释了，都是符合Xpath语法的，大家可以参考一下Xpath表达式的用法。<br />虽然上面的extractValue()函数都使用在SELECT列表中，其实该函数是可以使用在任何一个允许使用表达式的语句中的。<br />这里提示一点，使用这个函数可以轻松将XML文档列与全文检索结合起来。 <br />来到UpdateXML()函数了<br />语法<br />UPDATEXML (XML_document, XPath_string, new_value); <br />第一个参数：XML_document是String格式，为XML文档对象的名称，文中为Doc<br />第二个参数：XPath_string (Xpath格式的字符串) ，如果不了解Xpath语法，可以在网上查找教程。<br />第三个参数：new_value，String格式，替换查找到的符合条件的数据 <br />作用：改变文档中符合条件的节点的值 <br />示例#U1<br />mysql&gt; select UpdateXML(doc,'/book/author/initial','!!') from x;<br />+----------------------------------------------------------+<br />| UpdateXML(doc,'/book/author/initial','!!') |<br />+----------------------------------------------------------+<br />|<br />&lt;book&gt;<br />&lt;title&gt;A guide to the SQL standard&lt;/title&gt;<br />&lt;author&gt;<br />!!<br />&lt;surname&gt;Date&lt;/surname&gt;<br />&lt;/author&gt;<br />&lt;/book&gt; |<br />|<br />&lt;book&gt;<br />&lt;title&gt;SQL:1999&lt;/title&gt;<br />&lt;author&gt;<br />!!<br />&lt;surname&gt;Melton&lt;/surname&gt;<br />&lt;/author&gt;<br />&lt;/book&gt; |<br />+----------------------------------------------------------+<br />2 rows in set (0.00 sec)<br />UpdateXML函数的前两个参数用法以及写法与ExtractValue是一样的，因为这里需要查找到符合条件的数据节点。第三个参数就是为了替换节点字符串的。文中我们就使用!!字符串替换了book/author/initial节点的值。返回值是整个改变后的XML文档。这里记住，由于我们使用的是Select语句，因此并没有对真正的数据进行修改，而是在内存中将取出的数据进行修改然后返回给用户。如果需要彻底的修改文档内容，可以使用下面语句：<br />UPDATE x SET doc = UpdateXML(doc,/book/author/initial','!!');<br />细心的人也许发现这里有一个错误，也许是Bug，因为我们并不想修改结构化的文档，而仅仅需要修改内容，但UpdateXML函数将&lt;initial&gt;CJ&gt;&lt;/initial&gt;整个文本改成了!!，这样就不是我们所想要的了，因为它改变了整个文档结构。因此如果你需要的仅仅是修改这个结构化文档的内容部分，而不是整个文本，可以使用：<br />UpdateXML(doc,'/book/author/initial','&lt;initial&gt;!!&lt;/initial&gt;') from x;<br />示例#U2<br />mysql&gt; select<br />extractvalue(<br />UpdateXML(doc,'/book/author/initial','&lt;initial&gt;!!&lt;/initial&gt;'),'/book/author/<br />initial') from x;<br />+---------------------------------------------------------------------------<br />--------------------------+<br />|<br />extractvalue(<br />UpdateXML(doc,'/book/author/initial','&lt;initial&gt;!!&lt;/initial&gt;'),'/book/author/<br />initial') |<br />+---------------------------------------------------------------------------<br />--------------------------+<br />| !!<br />|<br />| !!<br />|<br />+---------------------------------------------------------------------------<br />--------------------------+<br />2 rows in set (0.01 sec)<br />最后一个例子，ExtractValue()函数和UpdateXML()函数的嵌套使用，结果是给我们展示将initial节点的值改成!!后选择查询initial节点的内容，结果大家也能看到了。 <br />上面只是这两个函数的最基本用法，如果大家还需要更多的资料，或有一些自己的心得，欢迎一起讨论。<br /></font><img src ="http://www.blogjava.net/chenpengyi/aggbug/57578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">benchensz</a> 2006-07-11 00:12 <a href="http://www.blogjava.net/chenpengyi/archive/2006/07/11/57578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Skype免费拨打美国、加拿大国际长途</title><link>http://www.blogjava.net/chenpengyi/archive/2006/07/09/57329.html</link><dc:creator>benchensz</dc:creator><author>benchensz</author><pubDate>Sun, 09 Jul 2006 04:11:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/archive/2006/07/09/57329.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/57329.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/archive/2006/07/09/57329.html#Feedback</comments><slash:comments>14</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/57329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/57329.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt">   </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可能有心的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用户也留意到了，前段时间</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">给大家发了一封邮件，说什么可以免费拨打美国加拿大的固定电话和手机，但尝试了后都发现不成功，都提示需要</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的点数。那时候甚至看到有人说</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司无耻，欺骗客户。但其实</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">没有骗人，因为这项服务只提供给加拿大和美国的用户，让这些美加本地的人打本地的电话免费而已。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<br />   </span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由此有一部分人展开了讨论，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是通过什么方式去限制其他地区的人呢？可能有人认为是通过账户信息上的国家名称，提出这个想法呢，就真的有点看不起</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">公司人员的智商了，当然这是我开玩笑了。有网络知识的人也知道，</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">应该是通过</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">IP</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">地址的归属地去限制用户拨打国际长途的。因此就有了一系列的尝试，代理服务器等等的使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">免费拨打国际长途的说话就来了。方法是很多的，所以我这里就举出我所知道的几个方法，如何使用</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拨打国际长途（仅限美国加拿大），这个虽然来说不属于</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">BlogJava</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的讨论内容，但对我们这些手头不阔绰的程序员来说是相当有用的，甚至可以考虑通过这个创业哦，因为如果你通过下面的方法架设好后，再开一个话吧，你需要的仅仅是一些跟电脑连通的话机和上网费用及电脑，然后就是很低的运营成本了。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<strong>
						<span lang="EN-US">
								<o:p> </o:p>
						</span>
				</strong>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<strong>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法</span>
						<span lang="EN-US">1</span>
				</strong>
				<strong>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span>
						<span lang="EN-US">
								<o:p>
								</o:p>
						</span>
				</strong>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络，让自己在美国或加拿大的朋友为自己建立一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的网络，然后拨号过去，再启动一个</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">Skype</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，就可以实现。够简单吧，呵呵，我说起来当然简单了，但做起来就不一定了。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这里最难的就是如何架设</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络了，首先讲怎么建立</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器，其实这个在</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">XP</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中就自带了，大家可以根据我的教程试试看。不过这里的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">服务器一定要是美国加拿大本地的，你可以跟那里的朋友说好，让他</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">24</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">小时开机就可以了。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">建立</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络服务器的连接教程如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<a href="http://windows.chinaitlab.com/skill/7620.html">http://windows.chinaitlab.com/skill/7620.html</a>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">微软的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">教学如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<a href="http://www.microsoft.com/china/technet/prodtechnol/windowsnetserver/evaluate/cpp/reskit/netsvc/rkdnsvpn.asp">http://www.microsoft.com/china/technet/prodtechnol/windowsnetserver/evaluate/cpp/reskit/netsvc/rkdnsvpn.asp</a>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而如何让客户端拨号到</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">VPN</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络的方法也很简单，步骤如下：</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开始</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">连接到</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">显示所有连接或者是控制面板</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网络连接</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">新建连接</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择连接到我的工作场所的网络</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虚拟专用网络连接</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输入一个你想要工作场所的名字（随意输入）</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt">--&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你是拨号上网的用户，最好选择自动的初始连接为你的拨号连接，其他的就无所谓的</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt"> --&gt;</span>
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后输入你的主机的</span>
				<spa