📄 j-chat-10-4.html
字号:
var topnextover=new Image(60,15); var topnextout=new Image(60,15); var bottomnextover=new Image(60,15); var bottomnextout=new Image(60,15); var topnextsectionover=new Image(108,15); var topnextsectionout=new Image(108,15); var bottomnextsectionover=new Image(108,15); var bottomnextsectionout=new Image(108,15); menu1over.src="imagemaster/himenu1.jpg"; menu1out.src="imagemaster/menu1.jpg"; menu2over.src="imagemaster/himenu2.jpg"; menu2out.src="imagemaster/menu2.jpg"; menu3over.src="imagemaster/himenu3.jpg"; menu3out.src="imagemaster/menu3.jpg"; menu4over.src="imagemaster/himenu4.jpg"; menu4out.src="imagemaster/menu4.jpg"; menu5over.src="imagemaster/himenu5.jpg"; menu5out.src="imagemaster/menu5.jpg"; menu6over.src="imagemaster/himenu6.jpg"; menu6out.src="imagemaster/menu6.jpg"; menu7over.src="imagemaster/himenu7.jpg"; menu7out.src="imagemaster/menu7.jpg"; menu8over.src="imagemaster/himenu8.jpg"; menu8out.src="imagemaster/menu8.jpg"; menu9over.src="imagemaster/himenu9.jpg"; menu9out.src="imagemaster/menu9.jpg"; menu10over.src="imagemaster/himenu10.jpg"; menu10out.src="imagemaster/menu10.jpg"; menu11over.src="imagemaster/himenu11.jpg"; menu11out.src="imagemaster/menu11.jpg"; menu12over.src="imagemaster/himenu12.jpg"; menu12out.src="imagemaster/menu12.jpg"; var mainblurb="Main menu"; var sectionblurb="Section menu"; var feedbackblurb="Give feedback on this tutorial"; var previousblurb="Go to previous panel"; var nextblurb="Go to next panel"; var nextsectionblurb="Go to next section"; topmainover.src="../i/h-main.gif"; topmainout.src="../i/main.gif"; bottommainover.src="../i/h-main.gif"; bottommainout.src="../i/main.gif"; topsectionover.src="../i/h-section.gif"; topsectionout.src="../i/section.gif"; bottomsectionover.src="../i/h-section.gif"; bottomsectionout.src="../i/section.gif"; topfeedbackover.src="../i/h-feedback.gif"; topfeedbackout.src="../i/feedback.gif"; bottomfeedbackover.src="../i/h-feedback.gif"; bottomfeedbackout.src="../i/feedback.gif"; toppreviousover.src="../i/h-previous.gif"; toppreviousout.src="../i/previous.gif"; bottompreviousover.src="../i/h-previous.gif"; bottompreviousout.src="../i/previous.gif"; topnextover.src="../i/h-next.gif"; topnextout.src="../i/next.gif"; bottomnextover.src="../i/h-next.gif"; bottomnextout.src="../i/next.gif"; topnextsectionout.src="../i/nextsection.gif"; topnextsectionover.src="../i/h-nextsection.gif"; bottomnextsectionout.src="../i/nextsection.gif"; bottomnextsectionover.src="../i/h-nextsection.gif"; } function iOut(image) { if (browser=="N3")document[image].src=eval(image + "out.src"); } function iOver(image) { if (browser=="N3")document[image].src=eval(image + "over.src"); } // --></script><script src="../i/emailfriend.js" language="javascript"></script><a href="#navskip"><img border="0" alt="Skip to main content" src="http://www.ibm.com/i/c.gif"></a><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr bgcolor="#006699"><td width="300"><table cellpadding="0" cellspacing="0" border="0" width="300"><tr bgcolor="#006699"><td width="150"><img height="25" width="150" alt="IBM" src="../i/mast_logo.gif"></td><td background="../i/mgradient.gif" width="150"><font face="Verdana, sans-serif" color="#99ccff" size="-2"><b> </b></font><br><img alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></td></tr></table></td><td width="300" align="left"><table cellpadding="0" cellspacing="0" border="0" width="300"><tr><td width="100"><a href="http://www.ibm.com/shop1/"><img alt="Shop" height="25" width="100" src="../i/shopibm.gif" border="0"></a></td><td width="100"><a href="http://www.ibm.com/support/"><img alt="Support" height="25" width="100" src="../i/support.gif" border="0"></a></td><td width="100"><a href="http://www.ibm.com/download/"><img alt="Downloads" height="25" width="100" src="../i/downloads.gif" border="0"></a></td></tr></table></td></tr></table><table cellpadding="0" cellspacing="0" border="0" width="100%"><tr bgcolor="#000000"><td><table cellpadding="0" cellspacing="0" border="0" width="600"><tr><td width="150" bgcolor="#006699"><img alt="" height="21" width="150" src="../i/mast_lnav_sp.gif"></td><td bgcolor="#000000" colspan="4"><table height="21" cellpadding="0" cellspacing="0" border="0"><tr><td align="center" width="79" bgcolor="#000000" height="21"><a href="http://www.ibm.com/home/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>IBM Home</b></font></a></td><td width="1" bgcolor="#959595"><img alt="" height="1" width="1" src="http://www.ibm.com/i/c.gif"></td><td align="center" width="74" bgcolor="#000000" height="21"><a href="http://www.ibm.com/products/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>Products</b></font></a></td><td width="1" bgcolor="#959595"><img alt="" height="1" width="1" src="http://www.ibm.com/i/c.gif"></td><td align="center" width="81" bgcolor="#000000" height="21"><a href="http://www.ibm.com/services/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>Consulting</b></font></a></td><td width="1" bgcolor="#959595"><img alt="" height="1" width="1" src="http://www.ibm.com/i/c.gif"></td><td align="center" width="81" bgcolor="#000000" height="21"><a href="http://www.ibm.com/solutions/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>Industries</b></font></a></td><td width="1" bgcolor="#959595"><img alt="" height="1" width="1" src="http://www.ibm.com/i/c.gif"></td><td align="center" width="57" bgcolor="#000000" height="21"><a href="http://www.ibm.com/news/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>News</b></font></a></td><td width="1" bgcolor="#959595"><img alt="" height="1" width="1" src="http://www.ibm.com/i/c.gif"></td><td align="center" width="78" bgcolor="#000000" height="21"><a href="http://www.ibm.com/ibm/" style="color: #ffffff;" class="nav"><font face="Verdana, sans-serif" color="#ffffff" size="-2"><b>About IBM</b></font></a></td></tr></table></td></tr></table></td></tr></table><TABLE border="0" cellpadding="0" cellspacing="0" width="100%"><TR><TD width="150" height="1" bgcolor="#ffffff"><IMG alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD width="150" height="3" bgcolor="#cc6633"><IMG alt="" height="3" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD width="150" height="1" bgcolor="#333333"><IMG alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD width="150" height="1" bgcolor="#000000"><IMG alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR></TABLE><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td><font face="Verdana, sans-serif" size="-1"><a href="http://www.ibm.com/">IBM</a> : <a href="http://www.ibm.com/developer/">developerWorks</a> : <a href="http://www.ibm.com/developer/java/">Java</a> : <a href="http://www-105.ibm.com/developerworks/education.nsf/dw/java-onlinecourse-bytitle">Education - online courses</a></font><br x="7"><img src="imagemaster/masthead.jpg" alt="Building a Java chat server"></td><td width="*" valign="bottom" align="right"><a border="0" href="j-chat.zip"><img alt="Download tutorial zip file" border="0" src="../i/icon-zip.gif"></a><a border="0" href="j-chat-ltr.pdf"><img alt="View letter-sized PDF file" border="0" src="../i/icon-pdf-ltr.gif"></a><a border="0" href="j-chat-a4.pdf"><img alt="View A4-sized PDF file" border="0" src="../i/icon-pdf-a4.gif"></a><a href="javascript:void newWindow()" border="0"><img alt="E-mail this tutorial to a friend" border="0" src="../i/icon-email.gif"></a></td></tr><tr><td height="2" colspan="2"><img height="2" width="1" src="http://www.ibm.com/i/c.gif"></td></tr></table><TABLE border="0" cellpadding="0" cellspacing="0" width="100%"><TR><TD width="150" height="1" bgcolor="#000000" colspan="6"><IMG alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD background="../i/sw-gold.gif"><a border="0" href="index.html" onMouseOver="iOver('topmain'); iOver('bottommain'); self.status=mainblurb; return true;" onMouseOut="iOut('topmain'); iOut('bottommain'); self.status=''; return true;"><img alt="Main menu" border="0" src="../i/main.gif" name="topmain"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topsection'); iOver('bottomsection'); self.status=sectionblurb; return true;" onMouseOut="iOut('topsection'); iOut('bottomsection'); self.status=''; return true;" href="index10.html"><img alt="Section menu" border="0" src="../i/section.gif" name="topsection"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topfeedback'); iOver('bottomfeedback'); self.status=feedbackblurb; return true;" onMouseOut="iOut('topfeedback'); iOut('bottomfeedback'); self.status=''; return true;" href="j-chat-11-3.html"><img alt="Give feedback on this tutorial" border="0" src="../i/feedback.gif" name="topfeedback"></a></TD><TD width="100%" background="../i/sw-gold.gif"><img src="http://www.ibm.com/i/c.gif"></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topprevious'); iOver('bottomprevious'); self.status=previousblurb; return true;" onMouseOut="iOut('topprevious'); iOut('bottomprevious'); self.status=''; return true;" href="j-chat-10-3.html"><img alt="Previous" border="0" src="../i/previous.gif" name="topprevious"></a></TD><TD background="../i/sw-gold.gif"><img border="0" src="../i/xnext.gif"></TD></TR><TR><TD width="100%" colspan="5"></TD><TD width="108" height="1" bgcolor="#000000" align="right"><IMG alt="" height="1" width="108" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD colspan="5"></TD><TD align="right"><a border="0" onMouseOver="iOver('topnextsection'); iOver('bottomnextsection'); self.status=nextsectionblurb; return true;" onMouseOut="iOut('topnextsection'); iOut('bottomnextsection'); self.status=''; return true;" href="j-chat-11-1.html"><img alt="Next Section" src="../i/nextsection.gif" border="0" name="topnextsection"></a></TD></TR></TABLE><table bgcolor="ffffff" cellspacing="0" cellpadding="2" border="0" height="400" width="100%"><tr valign="bottom"><a name="navskip"></a><td height="25" colspan="4"><img border="0" height="25" width="562" src="imagemaster/titlebar10.jpg" alt="10. Limitations"></td></tr><tr><td bgcolor="ffffff" width="15"> </td><td bgcolor="ffffff" width="12"> </td><td valign="top" align="left" bgcolor="ffffff" width="*"><p><br x="7"><table cellspacing="0" cellpadding="0" border="0"><tr><td width="90%"><font size="4" face="Verdana, Arial, Helvetica"><b>Internal synchronization</b></font></td><td width="200" align="right"><font size="1" face="Verdana, Arial, Helvetica"><nobr> page 4 of 4</nobr></font></td></tr></table><br x="7"><br x="7"></p><font size="2" face="Verdana, Arial, Helvetica"><p>The comments inside the code for <code style="font-family: Courier New, Courier, monospace; font-size: 12">Server.java</code> mention that some thread
synchronization is used to prevent problems related to properly
maintaining the list of active connections. This is just the kind of
synchronization that can really impact performance.</p><p>If synchronization turns out to be a bottleneck, there are a couple of things you
can try:</p><ul><li> Change <code style="font-family: Courier New, Courier, monospace; font-size: 12">removeConnection()</code> to simply make a note of which
connection should be removed, perhaps in another list. Then, do the
actual removing inside <code style="font-family: Courier New, Courier, monospace; font-size: 12">sendToAll()</code>, during or after traversal.<br x="7"><br x="7"></li><li> Use more than one thread to do the writing in <code style="font-family: Courier New, Courier, monospace; font-size: 12">sendToAll()</code>.</li></ul><br x="7"></font></td></tr></table><TABLE border="0" cellpadding="0" cellspacing="0" width="100%"><TR><TD align="right" colspan="6"><a border="0" onMouseOver="iOver('topnextsection'); iOver('bottomnextsection'); self.status=nextsectionblurb; return true;" onMouseOut="iOut('topnextsection'); iOut('bottomnextsection'); self.status=''; return true;" href="j-chat-11-1.html"><img alt="Next Section" src="../i/nextsection.gif" border="0" name="bottomnextsection"></a></TD></TR><TR><TD width="100%" colspan="5"></TD><TD width="108" height="1" bgcolor="#000000" align="right"><IMG alt="" height="1" width="108" src="http://www.ibm.com/i/c.gif"></TD></TR><TR><TD background="../i/sw-gold.gif"><a border="0" href="index.html" onMouseOver="iOver('topmain'); iOver('bottommain'); self.status=mainblurb; return true;" onMouseOut="iOut('topmain'); iOut('bottommain'); self.status=''; return true;"><img alt="Main menu" border="0" src="../i/main.gif" name="bottommain"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topsection'); iOver('bottomsection'); self.status=sectionblurb; return true;" onMouseOut="iOut('topsection'); iOut('bottomsection'); self.status=''; return true;" href="index10.html"><img alt="Section menu" border="0" src="../i/section.gif" name="bottomsection"></a></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topfeedback'); iOver('bottomfeedback'); self.status=feedbackblurb; return true;" onMouseOut="iOut('topfeedback'); iOut('bottomfeedback'); self.status=''; return true;" href="j-chat-11-3.html"><img alt="Give feedback on this tutorial" border="0" src="../i/feedback.gif" name="bottomfeedback"></a></TD><TD width="100%" background="../i/sw-gold.gif"><img src="http://www.ibm.com/i/c.gif"></TD><TD background="../i/sw-gold.gif"><a border="0" onMouseOver="iOver('topprevious'); iOver('bottomprevious'); self.status=previousblurb; return true;" onMouseOut="iOut('topprevious'); iOut('bottomprevious'); self.status=''; return true;" href="j-chat-10-3.html"><img alt="Previous" border="0" src="../i/previous.gif" name="bottomprevious"></a></TD><TD background="../i/sw-gold.gif"><img border="0" src="../i/xnext.gif"></TD></TR><TR><TD width="150" height="1" bgcolor="#000000" colspan="6"><IMG alt="" height="1" width="150" src="http://www.ibm.com/i/c.gif"></TD></TR></TABLE><TABLE cellpadding="0" cellspacing="0" border="0"><TR><TD width="182"><TABLE cellpadding="0" cellspacing="0" border="0" width="182"><TR bgcolor="#000000"><TD align="center" width="60" class="mast"><a style="text-decoration: none; color: #ffffff;" class="nav" href="http://www.ibm.com/privacy/"><font face="Arial, Verdana" size="2">Privacy</font></a></TD><TD width="1" bgcolor="#959595"><img alt="" border="0" height="20" width="1" src="http://www.ibm.com/i/c.gif"></TD><TD align="center" width="60" class="mast"><a style="text-decoration: none; color: #ffffff;" class="nav" href="http://www.ibm.com/legal/"><font face="Arial, Verdana" size="2">Legal</font></a></TD><TD width="1" bgcolor="#959595"><img alt="" border="0" height="20" width="1" src="http://www.ibm.com/i/c.gif"></TD><TD align="center" width="60" class="mast"><a style="text-decoration: none; color: #ffffff;" class="nav" href="http://www.ibm.com/contact/"><font face="Arial, Verdana" size="2">Contact</font></a></TD><TD width="1" bgcolor="#959595"><img alt="" border="0" height="21" width="1" src="http://www.ibm.com/i/c.gif"></TD></TR><TR bgcolor="#ffffff"><TD><img alt="" border="0" height="1" width="1" src="http://www.ibm.com/i/c.gif"></TD></TR></TABLE></TD><TD width="100%"><TABLE cellpadding="0" cellspacing="0" border="0" width="100%"><TR height="21" bgcolor="#000000"><TD><img alt="" border="0" height="21" width="1" src="http://www.ibm.com/i/c.gif"></TD></TR><TR bgcolor="#ffffff"><TD><img alt="" border="0" height="1" width="1" src="http://www.ibm.com/i/c.gif"></TD></TR></TABLE></TD></TR></TABLE></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -