??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲美女精品久久久,99999久久久久久亚洲,亚洲精品国产摄像头http://www.tkk7.com/huamengxing/category/25402.html专注于javazh-cnFri, 07 Sep 2012 04:19:12 GMTFri, 07 Sep 2012 04:19:12 GMT60遇到I白的处?/title><link>http://www.tkk7.com/huamengxing/archive/2012/09/07/387220.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Fri, 07 Sep 2012 01:23:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2012/09/07/387220.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/387220.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2012/09/07/387220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/387220.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/387220.html</trackback:ping><description><![CDATA[遇到面昄I白很有可能的一U原因就是编码不正确                   <img src ="http://www.tkk7.com/huamengxing/aggbug/387220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2012-09-07 09:23 <a href="http://www.tkk7.com/huamengxing/archive/2012/09/07/387220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文档?/title><link>http://www.tkk7.com/huamengxing/archive/2009/10/13/298083.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Tue, 13 Oct 2009 08:56:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2009/10/13/298083.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/298083.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2009/10/13/298083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/298083.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/298083.html</trackback:ping><description><![CDATA[文档是文档中可昄对象在排列时所占用的位|。比如网늚div标签它默认占用的宽度位置是一整行Qp标签默认占用宽度也是一整行Q因为div标签和p标签是块状对象? |页中大部分对象默认是占用文档流Q也有一些对象是不占文档的Q比如表单中隐藏域。当然我们也可以让占用文档流的元素{换成不占文档,q就要用到CSS中属性position来控制? 看看CSS 2.0对position的定义:索对象的定位方式。共?U取倹{? staticQ默认|无特D(静态)定位。对象遵循HTML定位规则 ? absoluteQ绝对定位。将对象从文档流中拖出,使用leftQrightQtopQbottom{属性相对于其最接近的一个最有定位设|的父对象进行绝对定位。如果不存在q样的父对象Q则依据body对象。而其层叠通过z-index属性定?。当对象定位在浏览器H口以外Q浏览器因此昄滚动条? fixedQ固定定位。对象定位遵从绝?absolute)方式。但是要遵守一些规范。当对象定位在浏览器H口以外Q浏览器不会因此昄滚动条,而当滚动条滚动时Q对象始l固定在原来位置? relativeQ相对定位。对象不可层叠,但将依据leftQrightQtopQbottom{属性在正常文档中偏移位置。当对象定位在浏览器H口以外Q浏览器因此昄滚动条? inheritQ承|对象承其父对象相应的?<img src ="http://www.tkk7.com/huamengxing/aggbug/298083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2009-10-13 16:56 <a href="http://www.tkk7.com/huamengxing/archive/2009/10/13/298083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java NIO cdSelector机制解析http://www.tkk7.com/huamengxing/archive/2009/06/16/282599.html华梦?/dc:creator>华梦?/author>Tue, 16 Jun 2009 06:50:00 GMThttp://www.tkk7.com/huamengxing/archive/2009/06/16/282599.htmlhttp://www.tkk7.com/huamengxing/comments/282599.htmlhttp://www.tkk7.com/huamengxing/archive/2009/06/16/282599.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/282599.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/282599.html

]]>
tomcat6使用niohttp://www.tkk7.com/huamengxing/archive/2009/06/16/282594.html华梦?/dc:creator>华梦?/author>Tue, 16 Jun 2009 06:30:00 GMThttp://www.tkk7.com/huamengxing/archive/2009/06/16/282594.htmlhttp://www.tkk7.com/huamengxing/comments/282594.htmlhttp://www.tkk7.com/huamengxing/archive/2009/06/16/282594.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/282594.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/282594.html 传统的SeverSocket.accept接收q接 -> 从线E池取出一个线E?-> 在该U程d文本q且解析HTTP协议 -> 在该U程生成ServletRequest、ServletResponseQ取求的Servlet -> 在该U程执行q个Servlet -> 在该U程把ServletResponse的内容发送到客户端连?-> 关闭q接?     我以前理解的使用nio后的tomcat6Q客Lq接到达 -> nio接收q接 -> nio使用轮询方式d文本q且解析HTTP协议Q单U程Q?-> 生成ServletRequest、ServletResponseQ取求的Servlet -> 直接在本U程执行q个Servlet -> 把ServletResponse的内容发送到客户端连?-> 关闭q接? 实际的tomcat6Q客Lq接到达 -> nio接收q接 -> nio使用轮询方式d文本q且解析HTTP协议Q单U程Q?-> 生成ServletRequest、ServletResponseQ取求的Servlet -> 从线E池取出U程Qƈ在该U程执行q个Servlet -> 把ServletResponse的内容发送到客户端连?-> 关闭q接?   从上囑֏以看出,BIO与NIO的不同,也导致进入客L处理U程的时L所不同Qtomcat5在接受连接后马上q入客户端线E,在客LU程里解析HTTP协议Q而tomcat6则是解析完HTTP协议后才q入多线E,另外Qtomcat6也比5早脱dLU程的环境?   实际的tomcat6与我之前猜想的差别主要集中在如何处理servlet的问题上。实际上即抛开ThreadLocal的问题,我之前理解tomcat6只用一个线E处理的x其实是行不同的。大安有经验:servlet是基于BIO的,执行期间会存在堵塞的Q例如读取文件、数据库操作{等。tomcat6使用了nioQ但不可能要求servlet里面要用nioQ而一旦存在堵塞,效率自然会锐降?   所以,最l的l论当然是tomcat6的servlet里面QThreadLocal照样可以使用Q不存在冲突

]]>
Object 转换 为int cd的数?/title><link>http://www.tkk7.com/huamengxing/archive/2009/03/14/259723.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Sat, 14 Mar 2009 07:21:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2009/03/14/259723.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/259723.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2009/03/14/259723.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/259723.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/259723.html</trackback:ping><description><![CDATA[Integer.parseInt(String.valueOf(o));<img src ="http://www.tkk7.com/huamengxing/aggbug/259723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2009-03-14 15:21 <a href="http://www.tkk7.com/huamengxing/archive/2009/03/14/259723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>h的{?/title><link>http://www.tkk7.com/huamengxing/archive/2009/02/15/254760.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Sun, 15 Feb 2009 07:36:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2009/02/15/254760.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/254760.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2009/02/15/254760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/254760.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/254760.html</trackback:ping><description><![CDATA[req.getDispatcher("/a/b/c.jsp").forward(req,res);<img src ="http://www.tkk7.com/huamengxing/aggbug/254760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2009-02-15 15:36 <a href="http://www.tkk7.com/huamengxing/archive/2009/02/15/254760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java connectionl典代码http://www.tkk7.com/huamengxing/archive/2009/02/13/254527.html华梦?/dc:creator>华梦?/author>Fri, 13 Feb 2009 03:42:00 GMThttp://www.tkk7.com/huamengxing/archive/2009/02/13/254527.htmlhttp://www.tkk7.com/huamengxing/comments/254527.htmlhttp://www.tkk7.com/huamengxing/archive/2009/02/13/254527.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/254527.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/254527.html          ……     ?
          con.setAutoCommit(false);  
          ……   ?//执行你的d  
          …… ?
          con.commit();  
          con.setAutoCommit(true);  
   
  }catch(SQLException   ex)   {  
          System.err.println("SQLException:   "   +   ex.getMessage());  
                  if   (con   !=   null)   {  
      try   {  
          System.err.print("Transaction   is   being   ");  
          System.err.println("rolled   back");  
          con.rollback();  
        }   catch(SQLException   excep)   {  
  System.err.print("SQLException:   ");  
  System.err.println(excep.getMessage());  
  }  
  }  
  }
finaly{
try{
if(con   !=   null){
con.close();
}
setAutoCommit(false)之后Q你必须手工调用commit   或?  rollback来确认事务是提交q是回滚  
  最好再调用setAutoCommit(true)来关闭事务状态再closeq接

]]>
从配|文件中获取数据库连?/title><link>http://www.tkk7.com/huamengxing/archive/2009/01/09/250629.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Fri, 09 Jan 2009 02:27:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2009/01/09/250629.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/250629.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2009/01/09/250629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/250629.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/250629.html</trackback:ping><description><![CDATA[  ServletContext context = servlet.getServletContext();<br />      <br /> DataSource ds = (DataSource)context.getAttribute("dataSource");<br />从配|文件中获取数据库连?br />       <img src ="http://www.tkk7.com/huamengxing/aggbug/250629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2009-01-09 10:27 <a href="http://www.tkk7.com/huamengxing/archive/2009/01/09/250629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日期的格式化http://www.tkk7.com/huamengxing/archive/2008/12/19/247312.html华梦?/dc:creator>华梦?/author>Fri, 19 Dec 2008 04:54:00 GMThttp://www.tkk7.com/huamengxing/archive/2008/12/19/247312.htmlhttp://www.tkk7.com/huamengxing/comments/247312.htmlhttp://www.tkk7.com/huamengxing/archive/2008/12/19/247312.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/247312.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/247312.html  Date t= DateFormat.getDateInstance(DateFormat.DATE_FIELD, Locale.CHINA).parse("2009-1-8");
  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//讄日期格式
       System.out.println(df.format(t));

]]>
jdk相关下蝲http://www.tkk7.com/huamengxing/archive/2008/10/17/234883.html华梦?/dc:creator>华梦?/author>Fri, 17 Oct 2008 05:53:00 GMThttp://www.tkk7.com/huamengxing/archive/2008/10/17/234883.htmlhttp://www.tkk7.com/huamengxing/comments/234883.htmlhttp://www.tkk7.com/huamengxing/archive/2008/10/17/234883.html#Feedback1http://www.tkk7.com/huamengxing/comments/commentRss/234883.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/234883.html

JDK1.6官方下蝲_JDK6官方下蝲地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

JDK6 API CHM中文参考下?

JDK6API中文参?70114.rar : http://chinesedocument.com/upimg/soft/JDK6API中文参?70114.rar

Java SE 6 API 中文?CHM 下蝲:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM

Java SE 5 API 中文?CHM 下蝲:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/JDK_API_1_5_zh_CN.CHM

JDK6 API 中文版下?

https://jdk-api-zh-cn.dev.java.net/

JDK6 API 中文?HTML 格式在线文档Q?a target="_blank">http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/
JDK6 API 中文版zip 格式下蝲Q?http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html_zh_CN.zip

1.6API文档Q中文)的下载地址Q?

ZIP格式Q?a target="_blank">http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html_zh_CN.zip

CHM格式Q?a >http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/chm/JDK_API_1_6_zh_CN.CHM



]]>
汉字~码问题http://www.tkk7.com/huamengxing/archive/2008/10/16/234651.html华梦?/dc:creator>华梦?/author>Thu, 16 Oct 2008 02:36:00 GMThttp://www.tkk7.com/huamengxing/archive/2008/10/16/234651.htmlhttp://www.tkk7.com/huamengxing/comments/234651.htmlhttp://www.tkk7.com/huamengxing/archive/2008/10/16/234651.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/234651.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/234651.html ׃常常要和汉字处理打交道,因此Q我常常受到汉字~码问题的困扰。在不断的打M坚持中,也积累了一Ҏ字编码方面的l验Q想和大家一起分享?/font>

一、汉字编码的U类

    汉字~码中现在主要用到的有三c,包括GBKQ?span lang="EN-US">GB2312?span lang="EN-US">Big5?/span>

    1 ?span lang="EN-US">GB2312又称国标码, 由国家标准d发布Q?/span> 1981 q?/span> 5 ?/span> 1 日实施,通行于大陆。新加坡{地也用此~码。它是一个简化字的编码规范,当然也包括其他的W号、字母、日文假名等Q共 7445 个图形字W,其中汉字?/span> 6763 个。我们^时说 6768 个汉字,实际上里Ҏ 5 个编码ؓI白Q所以d?/span> 6763 个汉字?/span>

      GB2312 规定“对L一个图形字W都采用两个字节表示Q每个字节均采用七位~码表示”,习惯上称W一个字节ؓ“高字节”,W二个字节ؓ“低字节”?/span> GB2312 中汉字的~码范围为,W一字节0xB0-0xF7(对应十进制ؓ176-247)Q第二个字节0xA0-0xFEQ对应十q制?span lang="EN-US">160-254Q?/span>

    GB2312 代码表分ؓ 94 个区Q对应第一字节Q?/span> 0xa1-0xfe Q;每个?/span> 94 个位Q?/span> 0xa1-0xfe Q,对应W二字节Q两个字节的值分别ؓ区号值和位号值加 32 Q?/span> 2OH Q,因此也称为区位码?/span> 01-09 ZؓW号、数字区Q?/span> 16-87 Zؓ汉字区( 0xb0-0xf7 Q, 10-15 区?/span> 88-94 区是有待q一步标准化的空白区?/span>

 

       2 ?/span> Big5 又称大五码,主要为香港与台湾使用Q即是一个繁体字~码?/span> 每个汉字׃个字节构成,W一个字节的范围?/span> 0X81 Q?/span> 0XFE Q即 129-255 Q,?/span> 126 U。第二个字节的范围不q箋Q分别ؓ 0X40 Q?/span> 0X7E Q即 64-126 Q, 0XA1 Q?/span> 0XFE Q即 161-254 Q,?/span> 157 U?/span>

 

    3 ?span lang="EN-US">GBK?span lang="EN-US">GB2312的扩展,是向上兼容的Q因?span lang="EN-US">GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含J体字的~码Q它?span lang="EN-US">Big5~码之间的关pLq没有弄明白Q好像是不一致的?span lang="EN-US">GBK中每个汉字仍然包含两个字节,W一个字节的范围?span lang="EN-US">0x81-0xFEQ即129-254Q,W二个字节的范围?span lang="EN-US">0x40-0xFEQ即64-254Q?span lang="EN-US">GBK中有码位23940个,包含汉字21003个?/span>

                                    

                                   ?span lang="EN-US">1 汉字~码范围

名称

W一字节

W二字节

GB2312

0xB0-0xF7(176-247)

0xA0-0xFE Q?/span> 160-254 Q?/span>

GBK

0x81-0xFE Q?/span> 129-254 Q?/span>

0x40-0xFE Q?/span> 64-254 Q?/span>

Big5

0x81-0xFE Q?/span> 129-255 Q?/span>

0x40-0x7E Q?/span> 64-126 Q?/span>

0xA1 Q?/span> 0xFE Q?/span> 161-254 Q?/span>

 

 

二、对汉字q行hash

    Z处理汉字的方便,在查找汉字的时候,我们通常会用?span lang="EN-US">hash的方法,那怎么来确定一个汉字位|呢Q这和每种~码的排列有关了Q这里主要给ZU?span lang="EN-US">hash函数的策略?/span>

    对于GB2312~码Q设输入的汉字ؓGBwordQ我们可以采用公?span lang="EN-US">(C1-176)*94 + (C2-161)GBindex。其中,C1表示W一字节Q?span lang="EN-US">C2表示W二字节。具体如下:

    GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;

    之所以用unsigned charcdQ是因ؓchar是一个字节,如果?span lang="EN-US">unsigend intQ因?span lang="EN-US">int?span lang="EN-US">4个字节的Q所以会造成扩展Q导致错误?/span>

       对于GBK~码Q设输入的汉字ؓGBKwordQ则可以采用公式   index=(ch1-0x81)*190+(ch2-0x40)-(ch2/128) Q其?span lang="EN-US">ch1是第一字节Q?span lang="EN-US">ch2是第二字节?/span>

    具体的,

    GBKindex = ((unsigned char)GBKword[0]-129)*190 +

               ((unsigned char)GBKword[1]-64) - (unsigned char)GBKword[1]/128;

 

三、怎样判断一个汉字的是什么编?/span>

直接Ҏ汉字的编码范围判断,对于GB2312?span lang="EN-US">GBK可用下面两个E序实现?/span>

1 、判断是否是GB2312

bool isGBCode(const string& strIn)

{

    unsigned char ch1;

    unsigned char ch2;

   

    if (strIn.size() >= 2)

    {

        ch1 = (unsigned char)strIn.at(0);

        ch2 = (unsigned char)strIn.at(1);

        if (ch1>=176 && ch1<=247 && ch2>=160 && ch2<=254)

            return true;

        else return false;

    }

    else return false;

}

2 、判断是否是GBK~码

bool isGBKCode(const string& strIn)

{

    unsigned char ch1;

    unsigned char ch2;

   

    if (strIn.size() >= 2)

    {

        ch1 = (unsigned char)strIn.at(0);

        ch2 = (unsigned char)strIn.at(1);

        if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)

            return true;

        else return false;

    }

    else return false;

}

 

3 、对?span lang="EN-US">Big5

    它的范围为:高字节从0xA0?span lang="EN-US">0xFEQ低字节?span lang="EN-US">0x40?span lang="EN-US">0x7EQ和0xA1?span lang="EN-US">0xFE两部分。判断一个汉字是否是BIG5~码Q可以如上对字符的编码范围判断即可。如何定位呢Q那么也惌所有编码排列ؓ一个二l坐标,U坐标是高字节,横坐标是低字节。这样一行上的汉字个敎ͼ(0x7E-0x40+1)+(0xFE-0xA1+1)Q?span lang="EN-US">157。那么定位算法分两块Qؓ:  

    if 0x40<=ch2<=0x7E: #is big5 char

    index=((ch1-0xA1)*157+(ch2-0x40))*2

    elif 0xA1<=ch2<=0xFE: #is big5 char

    index=((ch1-0xA1)*157+(ch2-0xA1+63))*2

 

对于W二块,计算偏移量时因ؓ有两块数|所以在计算后面一D值时Q不要忘了前面还有一D倹{?span lang="EN-US">0x7E-0x40+1=63?/span>

 

四、如果判断一个字W是西文字符q是中文字符

    大家知道西文字符主要是指 ASCII 码,它用一个字节表C。且q个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,W一个字节的转化为数字之后应该是于0的,因此可以Ҏ每个字节转化为数字之后是否小?span lang="EN-US">0Q判断它是否是汉字?/span>

    例如Q设输入字ؓstrinQ则Q?/span>

     If (strin.at(0) < 0)

       cout << ?/span> 是汉?span lang="EN-US">?<< endl;

     else cout << ?/span> 不是汉字?<< endl;

 

五、编码表下蝲

   GBK~码表,下蝲

   GB2312~码表,下蝲



]]>
常用的JavaScript验证正则表达?/title><link>http://www.tkk7.com/huamengxing/archive/2008/10/16/234650.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Thu, 16 Oct 2008 02:34:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2008/10/16/234650.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/234650.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2008/10/16/234650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/234650.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/234650.html</trackback:ping><description><![CDATA[ <p>下面都是我收集的一些比较常用的正则表达式,因ؓq_可能在表单验证的时候,用到的比较多。特发出来,让各位朋友共同用。呵c?/p> <p>匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]<br />评注Q匹配中文还真是个头疼的事,有了q个表达式就好办?/p> <p>匚w双字节字W?包括汉字在内)Q[^x00-xff]<br />评注Q可以用来计字W串的长度(一个双字节字符长度?QASCII字符?Q?/p> <p>匚wI白行的正则表达式:ns*r<br />评注Q可以用来删除空白行</p> <p>匚wHTML标记的正则表辑ּQ?lt; (S*?)[^>]*>.*?|< .*? /><br />评注Q网上流传的版本太糟p,上面q个也仅仅能匚w部分Q对于复杂的嵌套标记依旧无能为力</p> <p>匚w首尾I白字符的正则表辑ּQ^s*|s*$<br />评注Q可以用来删除行首行I白字符(包括I格、制表符、换늬{等)Q非常有用的表达?/p> <p> <span id="more-61"> </span> </p> <p> <code> <br />匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />评注Q表单验证时很实?/code> </p> <p>匚w|址URL的正则表辑ּQ[a-zA-z]+://[^s]*<br />评注Q网上流传的版本功能很有限,上面q个基本可以满需?/p> <p>匚w帐号是否合法(字母开_允许5-16字节Q允许字母数字下划线)Q^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />评注Q表单验证时很实?/p> <p>匚w国内电话LQd{3}-d{8}|d{4}-d{7}<br />评注Q匹配Ş式如 0511-4405222 ?021-87888822</p> <p>匚w腾讯QQP[1-9][0-9]{4,}<br />评注Q腾讯QQ号从10000开?/p> <p>匚w中国邮政~码Q[1-9]d{5}(?!d)<br />评注Q中国邮政编码ؓ6位数?/p> <p>匚ww䆾证:d{15}|d{18}<br />评注Q中国的w䆾证ؓ15位或18?/p> <p>匚wip地址Qd+.d+.d+.d+<br />评注Q提取ip地址时有?/p> <p>匚w特定数字Q?br />^[1-9]d*$    //匚w正整?br />^-[1-9]d*$   //匚w负整?br />^-?[1-9]d*$   //匚w整数<br />^[1-9]d*|0$  //匚w非负整数Q正整数 + 0Q?br />^-[1-9]d*|0$   //匚w非正整数Q负整数 + 0Q?br />^[1-9]d*.d*|0.d*[1-9]d*$   //匚w正QҎ<br />^-([1-9]d*.d*|0.d*[1-9]d*)$  //匚w负QҎ<br />^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匚w点?br />^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匚w非负点敎ͼ正QҎ + 0Q?br />^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匚w非正点敎ͼ负QҎ + 0Q?br />评注Q处理大量数据时有用Q具体应用时注意修正</p> <p>匚w特定字符Ԍ<br />^[A-Za-z]+$  //匚w?6个英文字母组成的字符?br />^[A-Z]+$  //匚w?6个英文字母的大写l成的字W串<br />^[a-z]+$  //匚w?6个英文字母的写l成的字W串<br />^[A-Za-z0-9]+$  //匚w由数字和26个英文字母组成的字符?br />^w+$  //匚w由数字?6个英文字母或者下划线l成的字W串</p> <p>在用RegularExpressionValidator验证控g时的验证功能及其验证表达式介l如?</p> <p>只能输入数字Q“^[0-9]*$?br />只能输入n位的数字Q“^d{n}$?br />只能输入臛_n位数字:“^d{n,}$?br />只能输入m-n位的数字Q“^d{m,n}$?br />只能输入零和非零开头的数字Q“^(0|[1-9][0-9]*)$?br />只能输入有两位小数的正实敎ͼ“^[0-9]+(.[0-9]{2})?$?br />只能输入?-3位小数的正实敎ͼ“^[0-9]+(.[0-9]{1,3})?$?br />只能输入非零的正整数Q“^+?[1-9][0-9]*$?br />只能输入非零的负整数Q“^-[1-9][0-9]*$?br />只能输入长度?的字W:“^.{3}$?br />只能输入?6个英文字母组成的字符Ԍ“^[A-Za-z]+$?br />只能输入?6个大写英文字母组成的字符Ԍ“^[A-Z]+$?br />只能输入?6个小写英文字母组成的字符Ԍ“^[a-z]+$?br />只能输入由数字和26个英文字母组成的字符Ԍ“^[A-Za-z0-9]+$?br />只能输入由数字?6个英文字母或者下划线l成的字W串Q“^w+$?br />验证用户密码:“^[a-zA-Z]w{5,17}$”正格式ؓQ以字母开_长度?-18之间Q?/p> <p>只能包含字符、数字和下划Uѝ?br />验证是否含有^%&?;=?$”等字符Q“[^%&',;=?$x22]+?br />只能输入汉字Q“^[u4e00-u9fa5],{0,}$?br />验证Email地址Q“^w+[-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$?br />验证InternetURLQ“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$?br />验证电话LQ“^((d{3,4})|d{3,4}-)?d{7,8}$?/p> <p>正确格式为:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,</p> <p>“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”?br />验证w䆾证号Q?5位或18位数字)Q“^d{15}|d{}18$?br />验证一q的12个月Q“^(0?[1-9]|1[0-2])$”正格式ؓQ?1??9”和?”?2?br />验证一个月?1天:“^((0?[1-9])|((1|2)[0-9])|30|31)$?/p> <p>正确格式为:?1”?9”和?”?1”?/p> <p>匚w中文字符的正则表辑ּQ?[u4e00-u9fa5]<br />匚w双字节字W?包括汉字在内)Q[^x00-xff]<br />匚wI的正则表辑ּQn[s| ]*r<br />匚wHTML标记的正则表辑ּQ?< (.*)>.*|< (.*) />/<br />匚w首尾I格的正则表辑ּQ?^s*)|(s*$)<br />匚wEmail地址的正则表辑ּQw+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*<br />匚w|址URL的正则表辑ּQhttp://([w-]+.)+[w-]+(/[w- ./?%&=]*)?</p> <p>(1)应用Q计字W串的长度(一个双字节字符长度?QASCII字符?Q?br />String.prototype.len=function(){return this.replace([^x00-xff]/g,”aa?.length;}</p> <p>(2)应用Qjavascript中没有像vbscript那样的trim函数Q我们就可以利用q个表达式来实现<br />String.prototype.trim = function()<br />{<br />return this.replace(/(^s*)|(s*$)/g, “?;<br />}<br />(3)应用Q利用正则表辑ּ分解和{换IP地址<br />function IP2V(ip) //IP地址转换成对应数?br />{<br />re=/(d+).(d+).(d+).(d+)/g //匚wIP地址的正则表辑ּ<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error(”Not a valid IP address!?<br />}<br />}<br />(4)应用Q从URL地址中提取文件名的javascriptE序<br />s=”http://www.9499.net/page1.htm?<br />s=s.replace(/(.*/){0,}([^.]+).*/ig,?2? ; //Page1.htm<br />(5)应用Q利用正则表辑ּ限制|页表单里的文本框输入内?br />用正则表辑ּ限制只能输入中文Qonkeyup=”value=?blog/value.replace(/["^u4E00-u9FA5]/g,? ?onbeforepaste=”clipboardData.setData(’text?clipboardData.getData(’text?.replace(/[^u4E00-u9FA5]/g,?)?br />用正则表辑ּ限制只能输入全角字符Q?onkeyup=”value=?blog/value.replace(/["^uFF00-uFFFF]/g,? ?onbeforepaste=”clipboardData.setData(’text?clipboardData.getData(’text?.replace(/[^uFF00-uFFFF]/g,?)?br />用正则表辑ּ限制只能输入数字Qonkeyup=”value=?blog/value.replace(/["^d]/g,? “onbeforepaste= “clipboardData.setData(’text?clipboardData.getData(’text?.replace(/[^d]/g,?)?br />用正则表辑ּ限制只能输入数字和英文:onkeyup=”value=?blog/value.replace(/[W]/g,”? “onbeforepaste=”clipboardData.setData(’text?clipboardData.getData(’text?.replace(/[^d]/g,?br /></p> <img src ="http://www.tkk7.com/huamengxing/aggbug/234650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2008-10-16 10:34 <a href="http://www.tkk7.com/huamengxing/archive/2008/10/16/234650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>汉字~码问题http://www.tkk7.com/huamengxing/archive/2008/10/16/234639.html华梦?/dc:creator>华梦?/author>Thu, 16 Oct 2008 02:03:00 GMThttp://www.tkk7.com/huamengxing/archive/2008/10/16/234639.htmlhttp://www.tkk7.com/huamengxing/comments/234639.htmlhttp://www.tkk7.com/huamengxing/archive/2008/10/16/234639.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/234639.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/234639.html ׃常常要和汉字处理打交道,因此Q我常常受到汉字~码问题的困扰。在不断的打M坚持中,也积累了一Ҏ字编码方面的l验Q想和大家一起分享?/font>

一、汉字编码的U类

    汉字~码中现在主要用到的有三c,包括GBKQ?span lang="EN-US">GB2312?span lang="EN-US">Big5?/span>

    1 ?span lang="EN-US">GB2312又称国标码, 由国家标准d发布Q?/span> 1981 q?/span> 5 ?/span> 1 日实施,通行于大陆。新加坡{地也用此~码。它是一个简化字的编码规范,当然也包括其他的W号、字母、日文假名等Q共 7445 个图形字W,其中汉字?/span> 6763 个。我们^时说 6768 个汉字,实际上里Ҏ 5 个编码ؓI白Q所以d?/span> 6763 个汉字?/span>

      GB2312 规定“对L一个图形字W都采用两个字节表示Q每个字节均采用七位~码表示”,习惯上称W一个字节ؓ“高字节”,W二个字节ؓ“低字节”?/span> GB2312 中汉字的~码范围为,W一字节0xB0-0xF7(对应十进制ؓ176-247)Q第二个字节0xA0-0xFEQ对应十q制?span lang="EN-US">160-254Q?/span>

    GB2312 代码表分ؓ 94 个区Q对应第一字节Q?/span> 0xa1-0xfe Q;每个?/span> 94 个位Q?/span> 0xa1-0xfe Q,对应W二字节Q两个字节的值分别ؓ区号值和位号值加 32 Q?/span> 2OH Q,因此也称为区位码?/span> 01-09 ZؓW号、数字区Q?/span> 16-87 Zؓ汉字区( 0xb0-0xf7 Q, 10-15 区?/span> 88-94 区是有待q一步标准化的空白区?/span>

 

       2 ?/span> Big5 又称大五码,主要为香港与台湾使用Q即是一个繁体字~码?/span> 每个汉字׃个字节构成,W一个字节的范围?/span> 0X81 Q?/span> 0XFE Q即 129-255 Q,?/span> 126 U。第二个字节的范围不q箋Q分别ؓ 0X40 Q?/span> 0X7E Q即 64-126 Q, 0XA1 Q?/span> 0XFE Q即 161-254 Q,?/span> 157 U?/span>

 

    3 ?span lang="EN-US">GBK?span lang="EN-US">GB2312的扩展,是向上兼容的Q因?span lang="EN-US">GB2312中的汉字的编码与GBK中汉字的相同。另外,GBK中还包含J体字的~码Q它?span lang="EN-US">Big5~码之间的关pLq没有弄明白Q好像是不一致的?span lang="EN-US">GBK中每个汉字仍然包含两个字节,W一个字节的范围?span lang="EN-US">0x81-0xFEQ即129-254Q,W二个字节的范围?span lang="EN-US">0x40-0xFEQ即64-254Q?span lang="EN-US">GBK中有码位23940个,包含汉字21003个?/span>

                                    

                                   ?span lang="EN-US">1 汉字~码范围

名称

W一字节

W二字节

GB2312

0xB0-0xF7(176-247)

0xA0-0xFE Q?/span> 160-254 Q?/span>

GBK

0x81-0xFE Q?/span> 129-254 Q?/span>

0x40-0xFE Q?/span> 64-254 Q?/span>

Big5

0x81-0xFE Q?/span> 129-255 Q?/span>

0x40-0x7E Q?/span> 64-126 Q?/span>

0xA1 Q?/span> 0xFE Q?/span> 161-254 Q?/span>

 

 

二、对汉字q行hash

    Z处理汉字的方便,在查找汉字的时候,我们通常会用?span lang="EN-US">hash的方法,那怎么来确定一个汉字位|呢Q这和每种~码的排列有关了Q这里主要给ZU?span lang="EN-US">hash函数的策略?/span>

    对于GB2312~码Q设输入的汉字ؓGBwordQ我们可以采用公?span lang="EN-US">(C1-176)*94 + (C2-161)GBindex。其中,C1表示W一字节Q?span lang="EN-US">C2表示W二字节。具体如下:

    GBindex = ((unsigned char)GBword.at(0)-176)*94 + (unsigned char)GBword.at(1) - 161;

    之所以用unsigned charcdQ是因ؓchar是一个字节,如果?span lang="EN-US">unsigend intQ因?span lang="EN-US">int?span lang="EN-US">4个字节的Q所以会造成扩展Q导致错误?/span>

       对于GBK~码Q设输入的汉字ؓGBKwordQ则可以采用公式   index=(ch1-0x81)*190+(ch2-0x40)-(ch2/128) Q其?span lang="EN-US">ch1是第一字节Q?span lang="EN-US">ch2是第二字节?/span>

    具体的,

    GBKindex = ((unsigned char)GBKword[0]-129)*190 +

               ((unsigned char)GBKword[1]-64) - (unsigned char)GBKword[1]/128;

 

三、怎样判断一个汉字的是什么编?/span>

直接Ҏ汉字的编码范围判断,对于GB2312?span lang="EN-US">GBK可用下面两个E序实现?/span>

1 、判断是否是GB2312

bool isGBCode(const string& strIn)

{

    unsigned char ch1;

    unsigned char ch2;

   

    if (strIn.size() >= 2)

    {

        ch1 = (unsigned char)strIn.at(0);

        ch2 = (unsigned char)strIn.at(1);

        if (ch1>=176 && ch1<=247 && ch2>=160 && ch2<=254)

            return true;

        else return false;

    }

    else return false;

}

2 、判断是否是GBK~码

bool isGBKCode(const string& strIn)

{

    unsigned char ch1;

    unsigned char ch2;

   

    if (strIn.size() >= 2)

    {

        ch1 = (unsigned char)strIn.at(0);

        ch2 = (unsigned char)strIn.at(1);

        if (ch1>=129 && ch1<=254 && ch2>=64 && ch2<=254)

            return true;

        else return false;

    }

    else return false;

}

 

3 、对?span lang="EN-US">Big5

    它的范围为:高字节从0xA0?span lang="EN-US">0xFEQ低字节?span lang="EN-US">0x40?span lang="EN-US">0x7EQ和0xA1?span lang="EN-US">0xFE两部分。判断一个汉字是否是BIG5~码Q可以如上对字符的编码范围判断即可。如何定位呢Q那么也惌所有编码排列ؓ一个二l坐标,U坐标是高字节,横坐标是低字节。这样一行上的汉字个敎ͼ(0x7E-0x40+1)+(0xFE-0xA1+1)Q?span lang="EN-US">157。那么定位算法分两块Qؓ:  

    if 0x40<=ch2<=0x7E: #is big5 char

    index=((ch1-0xA1)*157+(ch2-0x40))*2

    elif 0xA1<=ch2<=0xFE: #is big5 char

    index=((ch1-0xA1)*157+(ch2-0xA1+63))*2

 

对于W二块,计算偏移量时因ؓ有两块数|所以在计算后面一D值时Q不要忘了前面还有一D倹{?span lang="EN-US">0x7E-0x40+1=63?/span>

 

四、如果判断一个字W是西文字符q是中文字符

    大家知道西文字符主要是指 ASCII 码,它用一个字节表C。且q个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,W一个字节的转化为数字之后应该是于0的,因此可以Ҏ每个字节转化为数字之后是否小?span lang="EN-US">0Q判断它是否是汉字?/span>

    例如Q设输入字ؓstrinQ则Q?/span>

     If (strin.at(0) < 0)

       cout << ?/span> 是汉?span lang="EN-US">?<< endl;

     else cout << ?/span> 不是汉字?<< endl;

 汉字?Unicode 里面有单独的几块区域Q是中日韩(朝鲜Q共享的?br />以下两段
U+4e00 ~ U+9FB0 原来 GB2312 ?GBK 中的汉字
U+3400 ~ U+4DB6 包括 GB18030.2000 中那些增加的汉字

五、编码表下蝲

   GBK~码表,下蝲

   GB2312~码表,下蝲



]]>
java q的处?/title><link>http://www.tkk7.com/huamengxing/archive/2008/10/16/234635.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Thu, 16 Oct 2008 01:57:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2008/10/16/234635.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/234635.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2008/10/16/234635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/234635.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/234635.html</trackback:ping><description><![CDATA[q一D出CqQ那么不妨用ID法猜一下它的实际编码格式?<br />System.out.println(new String(testString.getBytes("ISO-8859-1"),"gb2312")); <br />System.out.println(new String(testString.getBytes("UTF8"),"gb2312")); <br />System.out.println(new String(testString.getBytes("GB2312"),"gb2312")); <br />System.out.println(new String(testString.getBytes("GBK"),"gb2312")); <br />System.out.println(new String(testString.getBytes("BIG5"),"gb2312")); <br /><img src ="http://www.tkk7.com/huamengxing/aggbug/234635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2008-10-16 09:57 <a href="http://www.tkk7.com/huamengxing/archive/2008/10/16/234635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LoadPolicyFile flash 跨域问题http://www.tkk7.com/huamengxing/archive/2008/08/14/loadPolicyFile.html华梦?/dc:creator>华梦?/author>Thu, 14 Aug 2008 05:19:00 GMThttp://www.tkk7.com/huamengxing/archive/2008/08/14/loadPolicyFile.htmlhttp://www.tkk7.com/huamengxing/comments/221978.htmlhttp://www.tkk7.com/huamengxing/archive/2008/08/14/loadPolicyFile.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/221978.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/221978.html目前来说q个跨域文gq只能加载一ơ这个是flashplayer的一个bug在flashplayer9中一直存在这个问题目前还没有解决掉? 具体详情参见 http://bugs.adobe.com/jira/browse/FP-67


]]>
response.getOutputStream() 在jsp面 中抛出异常的的处?/title><link>http://www.tkk7.com/huamengxing/archive/2007/11/05/158264.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Mon, 05 Nov 2007 06:43:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/11/05/158264.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/158264.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/11/05/158264.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/158264.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/158264.html</trackback:ping><description><![CDATA[ <br />d如下代码Q?br />out.clear();<br />out = pageContext.pushBody();<img src ="http://www.tkk7.com/huamengxing/aggbug/158264.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-11-05 14:43 <a href="http://www.tkk7.com/huamengxing/archive/2007/11/05/158264.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文g操作http://www.tkk7.com/huamengxing/archive/2007/10/31/157233.html华梦?/dc:creator>华梦?/author>Wed, 31 Oct 2007 08:32:00 GMThttp://www.tkk7.com/huamengxing/archive/2007/10/31/157233.htmlhttp://www.tkk7.com/huamengxing/comments/157233.htmlhttp://www.tkk7.com/huamengxing/archive/2007/10/31/157233.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/157233.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/157233.html   
    /** Creates a new instance of ssss */
    public ssss() {
    }
    public static void main(String s[]) throws IOException{
 //       java.net.URL  m=new java.net.URL("   //     HttpURLConnection sst=(HttpURLConnection) m.openConnection();
//           DataInputStream in = new DataInputStream(connection.getInputStream());
  //          DataOutputStream out = new DataOutputStream(new FileOutputStream(fileName));
      DataInputStream  tttt= new   DataInputStream((InputStream)new FileInputStream("c://ffffff.java.bak"));
  //      DataInputStream tttt=new DataInputStream(sst.getInputStream());
        DataOutputStream out = new DataOutputStream(new FileOutputStream("D://ffffff.java.bak"));
        byte[] buffer = new byte[4096];
        int count=0;
        while ((count = tttt.read(buffer))>0){
            out.write(buffer,0,count);
        }
        out.close();
        tttt.close();
    }

]]>
不错的网?/title><link>http://www.tkk7.com/huamengxing/archive/2007/10/26/156190.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Fri, 26 Oct 2007 08:51:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/10/26/156190.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/156190.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/10/26/156190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/156190.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/156190.html</trackback:ping><description><![CDATA[ <a >http://www.java2s.com</a> <br />http//www.dxiaoshuo.com<br /><a >http://www.mdianying.com</a><img src ="http://www.tkk7.com/huamengxing/aggbug/156190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-10-26 16:51 <a href="http://www.tkk7.com/huamengxing/archive/2007/10/26/156190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java性能http://www.tkk7.com/huamengxing/archive/2007/10/26/156164.html华梦?/dc:creator>华梦?/author>Fri, 26 Oct 2007 07:27:00 GMThttp://www.tkk7.com/huamengxing/archive/2007/10/26/156164.htmlhttp://www.tkk7.com/huamengxing/comments/156164.htmlhttp://www.tkk7.com/huamengxing/archive/2007/10/26/156164.html#Feedback0http://www.tkk7.com/huamengxing/comments/commentRss/156164.htmlhttp://www.tkk7.com/huamengxing/services/trackbacks/156164.html1. ?+"操作的字W串, 使用StringBuffer代替String;

2. 生成对象Ӟ分配合理的空间和大小,如StringBuffer,Vector的初始化大小;

3. 优化循环?避免在@环中生成同一个变量或调用同一个函敎ͼ参数变量也一P;

4. 量在用时才创对象; 应该量重复使用一个对象,而不是声明新的同cd?

5. 量使用局部变? 量使用静态变量,从而他所有的实例都共享这个变?

6. 量减少Ҏ的调? 可事先判? 同时用变量替?

7. 量使用JavapȝAPI,如复制大量数据时Q用System.arraycopy();

8. 可能用带有Buffer的类代替没有Buffer的类;

9. 不用保存太多的信息在HttpSession? 同时注意清除Session;

10. 大型数据量处理或批处理数据记?量使用直接讉K数据库的ҎQ用SQL直接存取数据;

11. 在生产环境下,止servlet和jsp的自动重?

12. 插入下述“显式”计时代码,对程序进行评:

long start = System.currentTimeMillis(); // 要计时的q算代码攑֜q儿,q回的时间以千分之一U(1毫秒Qؓ单位 long time = System.currentTimeMillis() - start;

13. 常用q算旉单位: q算 CZ 标准旉本地赋?i=n; 1.0 实例赋?this.i=n; 1.2 int增?i++; 1.5 byte增?b++; 2.0 short增?s++; 2.0 float增?f++; 2.0 double增?d++; 2.0 I@?while(true) n++; 2.0 三元表达?(x<0) ?-x : x 2.2 术调用 Math.abs(x); 2.5 数组赋?a[0] = n; 2.7 long增?l++; 3.5 Ҏ调用 funct(); 5.9 throw或catch异常 try{ throw e; }或catch(e){} 320 同步Ҏ调用 synchMehod(); 570 新徏对象 new Object(); 980 新徏数组 new int[10]; 3100



]]>
多线E编E——基?Q二Q?/title><link>http://www.tkk7.com/huamengxing/archive/2007/10/22/154917.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Mon, 22 Oct 2007 03:25:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/10/22/154917.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/154917.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/10/22/154917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/154917.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/154917.html</trackback:ping><description><![CDATA[ <span id="prh3pdn" class="h1b">多线E编E——基?Q二Q?/span> <br /> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td height="64">旉Q?006-08-16<br />作者:<a >axman</a><br />览ơ数Q? <script language="JavaScript" src="/beabbscount.jsp?d_id=163406" type="text/JavaScript"></script> 3723 <br />本文关键字:<a >Java</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=多线E?>多线E?/a>, <a >U程</a>, <a >U程对象</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=单线E?>单线E?/a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=go deep into java">go deep into java</a></td> <td> <table class="box_content" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td> <span id="1l1lfnb" class="h2b">文章工具</span> <br /> <img height="10" alt="推荐l朋? src="http://dev2dev.bea.com.cn/images/letter001.gif" width="19" align="absMiddle" /> <a href="javascript:sendmail()">推荐l朋?/a><br /><img height="18" alt="打印文章" src="http://dev2dev.bea.com.cn/images/print001.gif" width="19" align="absMiddle" /> <a href="javascript:window.print()">打印文章</a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <!-- 提取技术文?--> <div id="ldtbljd" class="beas"> <img height="1" alt="" src="http://dev2dev.bea.com.cn/images/dot6B6B6B.gif" width="100%" /> </div> <p>  在进入javaq_的线E对象之前,Z<a target="_blank">基础(一Q?/a>的一些问题,我先插入两个基本概念?/p> <h3>[U程的ƈ发与q行]</h3> <p>  在单CPUpȝ中,pȝ调度在某一时刻只能让一个线E运行,虽然q种调试机制有多UŞ?大多数是旉片轮巡ؓ?Q但无论如何Q要通过不断切换需要运行的U程让其q行的方式就?strong>q发(concurrent)</strong>。而在多CPUpȝ中,可以让两个以上的U程同时q行Q这U可以同时让两个以上U程同时q行的方式叫?strong>q行(parallel)</strong>?/p> <p>  在上面包括以后的所有论qCQ请各位朋友谅解Q我无法用最准确的词语来定义储如q发和ƈ行这cL语,但我以我的经验能通俗地告诉大家它是怎么一回事Q如果您看到我说的一?标准"文档上说的不一P只要意思一_那您׃要挑Z?/p> <h3>[JAVAU程对象]</h3> <p>  现在我们来开始考察JAVA中线E对象?</p> <p>  在JAVA中,要开始一个线E,有两U方式。一是直接调用Thread实例的start()ҎQ二?br />Runable实例传给一个Thread实例然后调用它的start()Ҏ?/p> <p>  在前面已l说q,U程对象和线E是两个完全不同的概c这里我们再ơ深入一下,生成一个线E的实例Qƈ不代表启动了U程。而启动线E是说在某个U程对象上启动了该实例对应的U程Q当该线E结束后Qƈ不会qx失?/p> <p>  对于从很多书c上可以看到的基知识我就不用多说了。既然是基础知识Q我也着重于从普通文档上M到的内容。所以本节我重点要说的是两种U程对象产生U程方式的区别?/p> <pre class="code">class MyThread extends Thread{ public int x = 0; public void run(){ for(int i=0;i<100;i++){ try{ Thread.sleep(10); }catch(Exception e){} System.out.println(x++); } } } </pre> <p>  如果我们生成MyThread的一个实例,然后调用它的start()ҎQ那么就产生了这个实例对应的U程Q?/p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ MyThread mt = new MyThread(); mt.start(); } } </pre> <p>  不用_最l会打印??9Q现在我们稍微玩一点花P</p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ MyThread mt = new MyThread(); mt.start(); System.out.println(101); } } </pre> <p>  也不用说Q在<a target="_blank">基础(一Q?/a>中我们知道由于单CPU的原因,一般会先打?01Q然后打??9。不q我们可以控制线E让它按我们的意思来q行Q?/p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ MyThread mt = new MyThread(); mt.start(); mt.join(); System.out.println(101); } } </pre> <p>  好了Q我们终于看刎ͼmt实例对应的线E?假如我有时说mtU程请你不要怪我Q不q我量不这么说)。在q行完成后,ȝE才打印101。因为我们让当前U程(q里是主U程){待mtU程的运行结束?在线E对象a上调用join()ҎQ就是让当前正在执行的线E等待线E对象a对应的线E运行完成后才l运行? 请大家一定要深刻理解q熟记这句话Q而我q里引出q个知识点的目的是ؓ了让你l看下面的例子:</p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ MyThread mt = new MyThread(); mt.start(); mt.join(); Thread.sleep(3000); mt.start(); } } </pre> <p>  当线E对象mtq行完成后,我们让主U程休息一下,然后我们再次在这个线E对象上启动U程。结果我们看刎ͼ</p> <p>  Exception in thread "main" java.lang.IllegalThreadStateException</p> <p>  也就是这U线E对象一时运行一ơ完成后Q它再也不能运行第二次了。我们可以看一下它有具体实?</p> <pre class="code"> public synchronized void start() { if (started) throw new IllegalThreadStateException(); started = true; group.add(this); start0(); } </pre> <p>  一个Thread的实例一旦调用start()ҎQ这个实例的started标记标CؓtrueQ事实中不管q个U程后来有没有执行到底,只要调用了一ơstart()再也没有机会运行了Q这意味着Q?/p> <h3>[通过Thread实例的start()Q一个Thread的实例只能生一个线E]</h3> <p>  那么如果要在一个实例上产生多个U程(也就是我们常说的U程?Q我们应该如何做呢?q就是Runnable接口l我们带来的伟大的功能?/p> <pre class="code">class R implements Runnable{ private int x = 0; public void run(){ for(int i=0;i<100;i++){ try{ Thread.sleep(10); }catch(Exception e){} System.out.println(x++); } } } </pre> <p>  <br />正如它的名字一PRunnable的实例是可运行的Q但它自己ƈ不能直接q行Q它需要被Thread对象来包装才行运行:</p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ new Thread(new R()).start(); } } </pre> <p>  当然q个l果和mt.start()没有什么区别。但如果我们把一个Runnable实例lThread对象多次包装Q我们就可以看到它们实际是在同一实例上启动线E:</p> <pre class="code">public class Test { public static void main(String[] args) throws Exception{ R r = new R(); for(int i=0;i<10;i++) new Thread(r).start(); } } </pre> <p>  x是实例对象,但结果是x被加C999Q说明这10个线E是在同一个r对象上运行的。请大家注意Q因个例子是在单CPU上运行的Q所以没有对多个U程同时操作共同的对象进行同步。这里是Z说明的方便而简化了同步Q而真正的环境中你无法预知E序会在什么环境下q行Q所以一定要考虑同步?/p> <p>  到这里我们做一个完整的例子来说明线E生的方式不同而生成的U程的区别:</p> <pre class="code">package debug; import java.io.*; import java.lang.Thread; class MyThread extends Thread{ public int x = 0; public void run(){ System.out.println(++x); } } class R implements Runnable{ private int x = 0; public void run(){ System.out.println(++x); } } public class Test { public static void main(String[] args) throws Exception{ for(int i=0;i<10;i++){ Thread t = new MyThread(); t.start(); } Thread.sleep(10000);//让上面的U程q行完成 R r = new R(); for(int i=0;i<10;i++){ Thread t = new Thread(r); t.start(); } } } </pre> <p>  上面10个线E对象生的10个线E运行时打印?0?。下?0个线E对象生的10个线E运行时打印??0。我们把下面?0个线E称?strong>同一实例(Runnable实例)的多个线E?/strong>?/p> <p>  下节我们研I线E对象方法,q是那句话,一般文档中可以d的内Ҏ不会介绍太多<br />请大家自׃解?/p> <strong>转蝲自dev2dev|友axman的go deep into java专栏?/strong> <h3>个h自述</h3> <p>一个男?<br />一个写E序的男?<br />一个写E序q正在从E序中寻扑ֿ乐的男h.<br />一个写E序q正在从E序中寻扑ֿ乐ƈ把快乐传递给大家的男?</p> <p>一个书?<br />一个寂寞的书生.<br />一个寂寞的梅香竹媄下敲声写늚书生.<br />一个寂寞的梅香竹媄下敲声写韉|钟暮鼓中逸气扬剑的书?</p> <p>那个男h是位书生。没有h知道他的姓名Q居无定所Q行无定t,亦耕变读,或渔或樵?br />所以有人叫他樵?Axman)Q有人叫他渔?fisher)?/p> <img src ="http://www.tkk7.com/huamengxing/aggbug/154917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-10-22 11:25 <a href="http://www.tkk7.com/huamengxing/archive/2007/10/22/154917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线E编E——基?Q一Q?/title><link>http://www.tkk7.com/huamengxing/archive/2007/10/22/154913.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Mon, 22 Oct 2007 03:17:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/10/22/154913.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/154913.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/10/22/154913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/154913.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/154913.html</trackback:ping><description><![CDATA[ <span id="d9lrh9t" class="h1b">多线E编E——基?Q一Q?/span> <br /> <br /> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td height="64">旉Q?006-08-08<br />作者:<a >axman</a><br />览ơ数Q? <script language="JavaScript" src="/beabbscount.jsp?d_id=163400" type="text/JavaScript"></script> 5279 <br />本文关键字:<a >Java</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=多线E?>多线E?/a>, <a >U程</a>, <a >U程对象</a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=单线E?>单线E?/a>, <a href="http://dev2dev.bea.com.cn/products/search.jsp?searchtype=keywords&keywords=go deep into java">go deep into java</a></td> <td> <table class="box_content" cellspacing="0" cellpadding="0" border="0"> <tbody> <tr> <td> <span id="bhvzrhv" class="h2b">文章工具</span> <br /> <img height="10" alt="推荐l朋? src="http://dev2dev.bea.com.cn/images/letter001.gif" width="19" align="absMiddle" /> <a href="javascript:sendmail()">推荐l朋?/a><br /><img height="18" alt="打印文章" src="http://dev2dev.bea.com.cn/images/print001.gif" width="19" align="absMiddle" /> <a href="javascript:window.print()">打印文章</a></td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <!-- 提取技术文?--> <div id="pzpfvhx" class="beas"> <img height="1" alt="" src="http://dev2dev.bea.com.cn/images/dot6B6B6B.gif" width="100%" /> </div> <p>  <strong>[写在前面]</strong></p> <p>  随着计算机技术的发展Q编E模型也来复杂多样化。但多线E编E模型是目前计算机系l架构的最l模型。随着CPU主频的不断攀升,X86架构的硬件已l成为瓶Q在q种架构的CPU主频最高ؓ4G。事实上目前3.6G主频的CPU已经接近了顶峰?/p> <p>  如果不能从根本上更新当前CPU的架?在很长一D|间内q不太可?Q那么l提高CPU性能的方法就是超U程CPU模式。那么,作业pȝ、应用程序要发挥CPU的最大性能Q就是要改变C多线E编E模型ؓȝq行处理pȝ和ƈ发式应用E序?/p> <p>  所以,掌握多线E编E模型,不仅是目前提高应用性能的手D,更是下一代编E模型的核心思想。多U程~程的目的,是"最大限度地利用CPU资源"Q当某一U程的处理不需要占用CPU而只和I/O,OEMBIOS{资源打交道Ӟ让需要占用CPU资源的其它线E有Z获得CPU资源。从Ҏ上说Q这是多线E编E的最l目的?/p> <p>  <strong>[W一需要弄清的问题]</strong></p> <p>  如同E序和进E的区别Q要掌握多线E编E,W一要弄清的问题是:<strong>U程对象和线E的区别</strong>?/p> <p>  U程对象是可以生线E的对象。比如在javaq_中Thread对象QRunnable对象。线E,是指正在执行的一个指点o序列。在javaq_上是指从一个线E对象的start()开始,q行runҎ体中的那一D늛对独立的q程?/p> <p>  鉴于作者的水^Q无法用更确切的词汇来描q它们的定义。但q两个有本质区别的概念请初学者细l体会,随着介绍的深入和例程分析的增加,׃慢慢明白它们所代表的真实含义?/p> <p>  天下难事必始于易Q天下大事必始于l?/p> <p>  让我们先从最单的"单线E?来入手:(1)带引可明只是相对而言的单U程Q?2)Zjava?/p> <pre class="code"> class BeginClass{ public static void main(String[] args){ for(int i=0;i<100;i++) System.out.println("Hello,World!"); } } </pre> <p>  如果我们成功~译了该java文gQ然后在命o行上敲入Q?/p> <p>  java BeginClass</p> <p>  现在发生了什么呢Q每一个javaE序员,从他开始学习java的第一分钟里都会接触到q个?/p> <p>  题,但是Q你知道它到底发生发什么?</p> <p>  JVMq程被启动,在同一个JVMq程中,有且只有一个进E,是它自己。然后在q个JVM环境中,所有程序的q行都是以线E来q行。JVM最先会产生一个主U程Q由它来q行指定E序的入口点。在q个E序中,是ȝE从mainҎ开始运行。当mainҎl束后,ȝE运行完成。JVMq程也随之退出?</p> <p>  我们看到的是一个主U程在运行mainҎQ这L只有一个线E执行程序逻辑的流E我们称</p> <p>  之ؓ<strong>单线E?/strong>。这是JVM提供l我们的单线E环境,事实上,JVM底层q至有垃圾回收q样的后台线E以及其它非javaU程Q但q些U程Ҏ们而言不可讉KQ我们只认ؓ它是单线E的?/p> <p>  ȝE是JVM自己启动的,在这里它不是从线E对象生的。在q个U程中,它运行了mainҎq个指o序列。理解它Q但它没有更多可以研I的内容?/p> <p>  <strong>[接触多线E]</strong></p> <pre class="code"> class MyThread extends Thread{ public void run(){ System.out.println("Thread say:Hello,World!"); } } public class MoreThreads{ public static void main(String[] args){ new MyThread(); new MyThread().start(); System.out.println("Main say:Hello,World"); } } </pre> <p>  执行q个E序QmainҎW一行生了一个线E对象,但ƈ没有U程启动?/p> <p>  mainҎW二行生了一个线E对象,q启动了一个线E?/p> <p>  mainҎW三行,产生q启动一个线E后Q主U程自己也l执行其它语句?/p> <p>  我们先不研究Thread对象的具体内容,E微来回想一下上面的两个概念Q?strong>U程对象</strong>?strong>U程</strong>。在JAVA中,U程对象是JVM产生的一个普通的Object子类。而线E是CPU分配l这个对象的一个运行过E。我们说的这个线E在q什么,不是说一个线E对象在q什么,而是q个q行q程在干什么。如果一时想不明白,不要急,但你要记得它们不是一回事p了?/p> <p>  累了吧?Z么不l箋了?</p> <p>  Zq种风格来介l多U程Qƈ不是每个人都喜欢和接受的Q如果你不喜Ƣ,正好不浪费你的时间了Q而如果你接受的话Q那q下一节吧?</p> <p>  <strong>转蝲自dev2dev|友axman?a target="_blank">go deep into java专栏</a>?/strong></p> <h3>个h自述</h3> <p>一个男?<br />一个写E序的男?<br />一个写E序q正在从E序中寻扑ֿ乐的男h.<br />一个写E序q正在从E序中寻扑ֿ乐ƈ把快乐传递给大家的男?</p> <p>一个书?<br />一个寂寞的书生.<br />一个寂寞的梅香竹媄下敲声写늚书生.<br />一个寂寞的梅香竹媄下敲声写韉|钟暮鼓中逸气扬剑的书?</p> <p>那个男h是位书生。没有h知道他的姓名Q居无定所Q行无定t,亦耕变读,或渔或樵?br />所以有人叫他樵?Axman)Q有人叫他渔?fisher)?/p> <!--文章其他信息--> <div id="fnr3jhd" class="dot001"> <img height="1" alt="" src="http://dev2dev.bea.com.cn/images/_.gif" width="100%" /> </div> <img src ="http://www.tkk7.com/huamengxing/aggbug/154913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-10-22 11:17 <a href="http://www.tkk7.com/huamengxing/archive/2007/10/22/154913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>多线E设计要?/title><link>http://www.tkk7.com/huamengxing/archive/2007/10/22/154881.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Mon, 22 Oct 2007 02:21:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/10/22/154881.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/154881.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/10/22/154881.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/154881.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/154881.html</trackback:ping><description><![CDATA[ <h3 align="center">多线E设计要?/h3> <p align="center"> <a >板桥里h</a> http://www.jdon.com 2002/01/10</p> <table cellspacing="5" cellpadding="0" width="1%" align="left" border="0"> <tbody> <tr> <td> <div class="dzf3d1z" id="vgad300x250" style="MARGIN-TOP: 10px; MARGIN-LEFT: 5px"> </div> </td> </tr> </tbody> </table> <p> <font size="4"> <b>1</b> </font> <b>.</b>多线E中有主内存和工作内存之分, 在JVM中,有一个主内存Q专门负责所有线E共享数据;而每个线E都有他自己U有的工作内存, d存和工作内存分贝在JVM的stack区和heap区?/p> <p> <b> <font size="4">2.</font> </b>U程的状态有'Ready', 'Running', 'Sleeping', 'Blocked', ?'Waiting'几个状态,<br />'Ready' 表示U程正在{待CPU分配允许q行的时间?/p> <p> </p> <p> <font size="4"> <b>3.</b> </font>U程q行ơ序q不是按照我们创Z们时的顺序来q行的,CPU处理U程的顺序是不确定的Q如果需要确定,那么必须手工介入Q用setPriority()Ҏ讄优先U?/p> <p> <b> <font size="4">4.</font> </b>我们无从知道一个线E什么时候运行,两个或多个线E在讉K同一个资源时Q需要synchronized</p> <p> <b> <font size="4">5.</font> </b> 每个U程会注册自己,实际某处存在着对它的引用,因此Q垃圑֛收机制对它就“束手无{”了?/p> <p> <b> <font size="4">6.</font> </b> DaemonU程区别一般线E之处是Q主E序一旦结束,DaemonU程׃l束?/p> <p> <b> <font size="4">7.</font> </b> 一个对象中的所有synchronizedҎ都共享一把锁Q这把锁能够防止多个Ҏ寚w用内存同时q行的写操作。synchronized staticҎ可在一个类范围内被怺间锁定v来?/p> <p> <b> <font size="4">8.</font> </b> 对于讉K某个关键׃n资源的所有方法,都必L它们设ؓsynchronizedQ否则就不能正常工作?/p> <p> <font size="4"> <b>9.</b> </font> 假设已知一个方法不会造成冲突Q最明智的方法是不要使用synchronizedQ能提高些性能?/p> <p> <b> <font size="4">10</font> </b>. 如果一?同步"Ҏ修改了一个变量,而我们的Ҏ要用到这个变?可能是只?,最好将自己的这个方法也设ؓ synchronized?/p> <p> <b> <font size="4">11.</font> </b> synchronized不能l承Q 父类的方法是synchronizedQ那么其子类重蝲Ҏ中就不会l承“同步”?/p> <p> <b> <font size="4">12.</font> </b> U程堵塞Blocked有几个原因造成Q?/p> <p>(1)U程在等候一些IO操作 <br />(2)U程试图调用另外一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用?/p> <p> <b> <font size="4">13.</font> </b>原子型操?atomic), 对原始型变量(primitive)的操作是原子型的atomic. 意味着q些操作是线E安全的Q?但是大部分情况下Q我们ƈ不能正确使用Q来看看 i = i + 1 , i是int型,属于原始型变量:<br /><br />(1)从主内存中读取i值到本地内存. <br />(2)g本地内存装蝲到线E工作拷贝中. <br />(3)装蝲变量1. <br />(4)i ?1. <br />(5)结果给变量i. <br />(6)i保存到线E本地工作拷贝中. <br />(7)写回d? </p> <p>注意原子型操作只限于W?步到W?步的d以及W?到第7步的? i的D是可能被同时执行i=i+1的多U程中断打扰(在第4??/p> <p>double 和long 变量是非原子型的(non-atomic)。数l是object 非原子型?br /></p> <p> </p> <p> <font size="4"> <b>14.</b> </font> ׃13条的原因Q我们解军_法是Q?/p> <p>class xxx extends Thread{</p> <p>//i会被l常修改<br />private int i;<br /><br />public synchronized int read(){ return i;}</p> <p>public synchronized void update(){ i = i + 1;}</p> <p>..........</p> <p>}</p> <p> <b> <font size="4">15.</font> </b> Volatile变量Q?volatile变量表示保证它必L与主内存保持一_它实际是"变量的同?, 也就是说对于volatile变量的操作是原子型的Q如用在long ?double变量前?br /></p> <p> <b> <font size="4">16.</font> </b> 使用yield()会自动放弃CPUQ有时比sleep更能提升性能?/p> <p> <b> <font size="4">17.</font> </b> sleep()和wait()的区别是Qwait()Ҏ被调用时会解除锁定,但是我们能用它的地方只是在一个同步的Ҏ或代码块内?/p> <p> <b> <font size="4">18.</font> </b> 通过刉羃同步范_可能的实现代码块同步,wait(毫秒?可在指定的毫U数可退出waitQ对于wait()需要被notisfy()或notifyAll()t醒?/p> <p> <b> <font size="4">19.</font> </b> 构造两个线E之间实旉信的方法分几步Q?br />(1). 创徏一个PipedWriter和一个PipedReader和它们之间的道;<br />PipedReader in = new PipedReader(new PipedWriter())<br />(2). 在需要发送信息的U程开始之前,外部的PipedWriter导向l其内部的Writer实例out<br />(3). 在需要接受信息的U程开始之前,外部的PipedReader导向l其内部的Reader实例in<br />(4). q样攑օout的所有东西度可从in中提取出来?/p> <p> <b> <font size="4">20.</font> </b> synchronized带来的问题除性能有所下降外,最大的~点是会带来死锁DeadLockQ只有通过谨慎设计来防止死锁,其他毫无办法Q这也是U程难以驯服的一个原因。不要再使用stop() suspend() resume()和destory()Ҏ</p> <p> <b> <font size="4">21.</font> </b> 在大量线E被堵塞Ӟ最高优先的线E先q行。但是不表示低别线E不会运行,q行概率而已?/p> <p> <b> <font size="4">22.</font> </b> U程l的主要优点是:使用单个命o可完成对整个U程l的操作。很需要用到线E组?/p> <p> <b> <font size="4">23.</font> </b> 从以下几个方面提升多U程的性能Q?/p> <p>查所有可能Block的地方,可能的多的使用sleep或yield()以及wait();</p> <p>可能g长sleep(毫秒?的时?</p> <p>q行的线E不用超q?00个,不能太多Q?/p> <p>不同q_linux或windows以及不同JVMq行性能差别很大?/p> <p> <font size="4"> <strong>24</strong>.</font> 推荐几篇相关英文文章:</p> <img src ="http://www.tkk7.com/huamengxing/aggbug/154881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-10-22 10:21 <a href="http://www.tkk7.com/huamengxing/archive/2007/10/22/154881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>监听器的一个实?/title><link>http://www.tkk7.com/huamengxing/archive/2007/10/11/152041.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Thu, 11 Oct 2007 06:50:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/10/11/152041.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/152041.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/10/11/152041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/152041.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/152041.html</trackback:ping><description><![CDATA[ <p>public class PlatContextListener implements ServletContextListener{<br />    private Timer timer = null; <br />    /** 应用E序的根目录 */<br />    private static String contextPath = null;<br />    <br />    /** Creates a new instance of PlatContextListener */<br />    public PlatContextListener() {<br />    }</p> <p>    public void contextInitialized(ServletContextEvent sce) {<br />        ServletContext sc = sce.getServletContext();<br />        contextPath = sc.getRealPath("").replace("\\", "/");<br />        <br />        int nInterval=24*60*60*1000;<br />        <br />        timer = new Timer(true); <br />        <br />        //每天零晨3Ҏ行清理工?br />        Calendar calendar = Calendar.getInstance();<br />        calendar.set(Calendar.HOUR_OF_DAY,3);<br />        calendar.set(Calendar.MINUTE,0);<br />        calendar.set(Calendar.SECOND,0);<br />        Date time = calendar.getTime();<br />    <br />        timer.scheduleAtFixedRate(new PlatTimerClearTask(), time,nInterval); <br />        </p> <p>    }</p> <p>    public void contextDestroyed(ServletContextEvent sce) {<br />        timer.cancel();<br />    }<br />    <br />    public static String getContextPath() {<br />        return contextPath;<br />    }<br />    <br />}<br /></p> <img src ="http://www.tkk7.com/huamengxing/aggbug/152041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-10-11 14:50 <a href="http://www.tkk7.com/huamengxing/archive/2007/10/11/152041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数组只有length属?/title><link>http://www.tkk7.com/huamengxing/archive/2007/08/30/141478.html</link><dc:creator>华梦?/dc:creator><author>华梦?/author><pubDate>Thu, 30 Aug 2007 10:18:00 GMT</pubDate><guid>http://www.tkk7.com/huamengxing/archive/2007/08/30/141478.html</guid><wfw:comment>http://www.tkk7.com/huamengxing/comments/141478.html</wfw:comment><comments>http://www.tkk7.com/huamengxing/archive/2007/08/30/141478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/huamengxing/comments/commentRss/141478.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/huamengxing/services/trackbacks/141478.html</trackback:ping><description><![CDATA[数组只有length属?br /><br />Locale.getAvailableLocales().length<img src ="http://www.tkk7.com/huamengxing/aggbug/141478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/huamengxing/" target="_blank">华梦?/a> 2007-08-30 18:18 <a href="http://www.tkk7.com/huamengxing/archive/2007/08/30/141478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://xxxxcccc.com" target="_blank">õĻ2019</a>| <a href="http://600c20.com" target="_blank">޹aƷ</a>| <a href="http://www2019rz.com" target="_blank">˳վɫ7799</a>| <a href="http://mt569.com" target="_blank">ձ</a>| <a href="http://hkcdk.com" target="_blank">Ƶ</a>| <a href="http://8123pp.com" target="_blank">޶·Ļ߿</a>| <a href="http://83k5.com" target="_blank">ٸaëƬ</a>| <a href="http://tianwu520.com" target="_blank">þҹ³Ƭ</a>| <a href="http://dzhankong.com" target="_blank">ӰԺavɫ</a>| <a href="http://mp4888.com" target="_blank">ɫͼС˵ר</a>| <a href="http://jgxsdst.com" target="_blank">һvһ</a>| <a href="http://720880.com" target="_blank">ѵĻɫվ</a>| <a href="http://51caox.com" target="_blank">þպƬ</a>| <a href="http://gzbaida.com" target="_blank">޳aƬӰԺ</a>| <a href="http://zzjiji.com" target="_blank">ƵѲ</a>| <a href="http://yw835.com" target="_blank">99þþù</a>| <a href="http://ljdst.com" target="_blank">޹av߹ۿ</a>| <a href="http://xiaoduanfa.com" target="_blank">ľƷAVƬ</a>| <a href="http://38miao.com" target="_blank">ƷƵվ</a>| <a href="http://6atb.com" target="_blank">2022ѹƷ</a>| <a href="http://dslygc.com" target="_blank">޺ϼԭƷ</a>| <a href="http://cztbm.com" target="_blank">Ļ</a>| <a href="http://gyqcy.com" target="_blank">պһëƬ</a>| <a href="http://51caox.com" target="_blank">5555߲Ѳ</a>| <a href="http://yw835.com" target="_blank">ѹۿվ</a>| <a href="http://7766qq.com" target="_blank">޴߶רһ</a>| <a href="http://moushengguigz.com" target="_blank">˾Ʒvideos</a>| <a href="http://bjfljg.com" target="_blank">߹ۿһëƬ</a>| <a href="http://8mav958.com" target="_blank">999ھƷƵ</a>| <a href="http://sztsa.com" target="_blank">ij˾þþþӰԺѹۿ</a>| <a href="http://wwwfac37.com" target="_blank">պAV뾫Ʒ</a>| <a href="http://25gh.com" target="_blank">޹Ʒһþ</a>| <a href="http://rr433.com" target="_blank">޾Ʒպ?V</a>| <a href="http://tedegold.com" target="_blank">ëƬƵa</a>| <a href="http://jiayila.com" target="_blank">պѵƵ߹ۿ㽶</a>| <a href="http://gjwlgzs.com" target="_blank">պӰ߹ۿַ</a>| <a href="http://shenghe228.com" target="_blank">þۺϾþۺ</a>| <a href="http://yw8885.com" target="_blank">þþ뾫ƷպĦ</a>| <a href="http://fuzhiwushu.com" target="_blank">Ƶһ</a>| <a href="http://szzdjl.com" target="_blank">һƬѲ</a>| <a href="http://www1688mz.com" target="_blank">ŮƵȫ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>