??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品美女视频,亚洲一区二区三区高清,亚洲最大的成人网http://www.tkk7.com/japper/archive/2012/09/19/388042.htmljapperjapperWed, 19 Sep 2012 01:51:00 GMThttp://www.tkk7.com/japper/archive/2012/09/19/388042.htmlhttp://www.tkk7.com/japper/comments/388042.htmlhttp://www.tkk7.com/japper/archive/2012/09/19/388042.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/388042.htmlhttp://www.tkk7.com/japper/services/trackbacks/388042.html
  • import Java.util.*;
  •   public class ShowDate {
  •   public static void main(String[] args) {
  •   Calendar calendar = new GregorianCalendar();
  •   Date trialTime = new Date();
  •   calendar.setTime(trialTime);
  •   // print out a bunch of interesting things
  •   System.out.println("ERA: " + calendar.get(Calendar.ERA));
  •   System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
  •   System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
  •   System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
  •   System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
  •   System.out.println("DATE: " + calendar.get(Calendar.DATE));
  •   System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
  •   System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
  •   System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
  •   System.out.println("DAY_OF_WEEK_IN_MONTH: " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
  •   System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
  •   System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
  •   System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
  •   System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
  •   System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
  •   System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
  •   System.out.println("ZONE_OFFSET: " + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
  •   System.out.println("DST_OFFSET: " + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
  •   System.out.println("Current Time, with hour reset to 3");
  •   calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
  •   calendar.set(Calendar.HOUR, 3);
  •   System.out.println("ERA: " + calendar.get(Calendar.ERA));
  •   System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
  •   System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
  •   System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
  •   System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
  •   System.out.println("DATE: " + calendar.get(Calendar.DATE));
  •   System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
  •   System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
  •   System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
  •   System.out.println("DAY_OF_WEEK_IN_MONTH: " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));


  • japper 2012-09-19 09:51 发表评论
    ]]>
    Android SDK下蝲和更新失败的解决Ҏhttp://www.tkk7.com/japper/archive/2012/09/10/387379.htmljapperjapperMon, 10 Sep 2012 03:18:00 GMThttp://www.tkk7.com/japper/archive/2012/09/10/387379.htmlhttp://www.tkk7.com/japper/comments/387379.htmlhttp://www.tkk7.com/japper/archive/2012/09/10/387379.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/387379.htmlhttp://www.tkk7.com/japper/services/trackbacks/387379.html
    Android SDK下蝲和更新失败的解决Ҏ

     

    最q刚换了电脑Q开始搭建Android开发环境的时候,下蝲SDKL会出现如下错误:
     
    1.Failed to fetch URL http://dl-ssl.google.com/Android/repository/addons_list-1.xml
    据说dl-ssl.google.com在大陆被ZQ伟大的天朝真是不让人活了,解决Ҏ是修改C:\Windows\System32\drivers\etc\hosts文g。添加一行:
     
    1.74.125.237.1       dl-ssl.google.com 
    q里需要注意的是hosts文g是只ȝQ我们没有权限修改,需要我们将hosts文g复制到桌面或者其他地方,然后修改Q代码如下:
    1.# Copyright (c) 1993-2009 Microsoft Corp. 
    2.# 
    3.# This is a sample HOSTS file used by Microsoft TCP/IP for Windows. 
    4.# 
    5.# This file contains the mappings of IP addresses to host names. Each 
    6.# entry should be kept on an individual line. The IP address should 
    7.# be placed in the first column followed by the corresponding host name. 
    8.# The IP address and the host name should be separated by at least one 
    9.# space. 
    10.# 
    11.# Additionally, comments (such as these) may be inserted on individual 
    12.# lines or following the machine name denoted by a '#' symbol. 
    13.# 
    14.# For example: 
    15.# 
    16.#      102.54.94.97     rhino.acme.com          # source server 
    17.#       38.25.63.10     x.acme.com              # x client host 
    18. 
    19.# localhost name resolution is handled within DNS itself. 
    20.#   127.0.0.1       localhost 
    21.#   ::1             localhost 
    22.//Ԍ是增加q一句哦  
    23.74.125.237.1       dl-ssl.google.com 
    然后保存Q复制修改后的hosts文g到C:\Windows\System32\drivers\etc 目录Q替换文件就好!Q!我们再次下蝲SDK的时候就会成功啦Q如下图Q?br /> 


    嘿嘿Q大功告成啦Q!Q?br /> 
    PSQ补充下Q在mac或Linux中,hosts文g所在位|ؓ/etc/hostsQ可以用sudo vim /etc/hosts来编辑?/p>

    japper 2012-09-10 11:18 发表评论
    ]]>
    免安装版Tomcat 6.0.35到的问?Q打开tomcat理界面Ӟ用户名和密码错误的设|方?/title><link>http://www.tkk7.com/japper/archive/2012/09/05/387096.html</link><dc:creator>japper</dc:creator><author>japper</author><pubDate>Wed, 05 Sep 2012 06:22:00 GMT</pubDate><guid>http://www.tkk7.com/japper/archive/2012/09/05/387096.html</guid><wfw:comment>http://www.tkk7.com/japper/comments/387096.html</wfw:comment><comments>http://www.tkk7.com/japper/archive/2012/09/05/387096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/japper/comments/commentRss/387096.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/japper/services/trackbacks/387096.html</trackback:ping><description><![CDATA[<p><img alt="" src="http://my.csdn.net/uploads/201204/04/1333521098_5458.jpg" />Tomcat 6.0.35 的功能有些不同于Tomcat 6.0.20。我下蝲的Tomcat 6.0.35是免安装的,而以前用的Tomcat 6.0.20是需要安装的Q而且Tomcat 6.0.20 的安装密码,卌入Tomcat Manager q个地方的密码是在安装的时候指定的Q但是呢QTomcat 6.0.35 ׃是免安装的,所以就没有地方L定密码了Q当我们讉KTomcat 6.0.35 的Tomcat Manager的时?Q输入以前默认的用户名:admin 密码为空Q会发现出现?03 错误Q即access deny 。调试了好久Q最后终于找出原因了。根?03面的提C,需要在tomcat的配|文件中Q即conf/tomcat-users.xmlQ加?/p><p><span style="white-space: pre;"></span><role rolename="manager-gui"/></p><p><span style="white-space: pre;"></span><user username="admin" password="" roles="manager-gui"/></p><p>有一点必L意,其中的rolename 必须?#8220;manager-gui” Q更Ҏadmin 或?admin-guiQ都不好用,而下面的username  password是可以Q意的Q但是后面的roles 必须和上面role 中的rolename相同?/p><img src ="http://www.tkk7.com/japper/aggbug/387096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/japper/" target="_blank">japper</a> 2012-09-05 14:22 <a href="http://www.tkk7.com/japper/archive/2012/09/05/387096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过 jconsole查看tomcatq行情况的配|方?/title><link>http://www.tkk7.com/japper/archive/2012/09/05/387094.html</link><dc:creator>japper</dc:creator><author>japper</author><pubDate>Wed, 05 Sep 2012 06:16:00 GMT</pubDate><guid>http://www.tkk7.com/japper/archive/2012/09/05/387094.html</guid><wfw:comment>http://www.tkk7.com/japper/comments/387094.html</wfw:comment><comments>http://www.tkk7.com/japper/archive/2012/09/05/387094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/japper/comments/commentRss/387094.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/japper/services/trackbacks/387094.html</trackback:ping><description><![CDATA[ <p style="text-align: center; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "Times New Roman"; font-size: 16pt; font-weight: bold; mso-spacerun: "yes";'>通过 <font face="Times New Roman">jconsole</font><font face="宋体">查看</font><font face="Times New Roman">tomcat</font><font face="宋体">q行情况</font></span><span style='font-family: "宋体"; font-size: 16pt; font-weight: bold; mso-spacerun: "yes";'>的配|方?/span><span style='font-family: "宋体"; font-size: 16pt; font-weight: bold; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-align: center; text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>——Z<font face="Times New Roman">JDK1.5</font><font face="宋体">?/font><font face="Times New Roman">Linux</font><font face="宋体">Q?/font><font face="Times New Roman">Redhat5.5</font><font face="宋体">Q?/font><font face="Times New Roman">Tomcat6</font></span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-align: center; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>׃目的原因,需要?font face="Times New Roman">jconsole</font><font face="宋体">?/font><font face="Times New Roman">tomcat</font><font face="宋体">q行q程监控Q结合网上的资料寚w|方法进行了ȝ?/font></span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>W一步、配|?font face="Times New Roman">tomcat</font></span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>打开<font face="Times New Roman">%</font></span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>TOMCAT</span><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>_HOME%/bin<font face="宋体">下的文g</font><font face="Times New Roman">catalina.</font></span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>sh</span><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>Q?/span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>搜烦“<font face="Times New Roman">JAVA_OPTS</font><font face="宋体">”扑ֈ</font></span><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>下面q行Q?/span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'>if [ -z "$LOGGING_MANAGER" ]; then</span><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'>  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"</span><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'>else</span><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'>  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"</span><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt; margin-left: 21pt;" class="p0"><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'>fi </span><span style='font-family: "Courier New"; font-size: 9pt; mso-spacerun: "yes";'><o:p></o:p></span></p><!--EndFragment--><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>在每?#8220;<font face="Times New Roman">JAVA_OPTS</font><font face="宋体">”后边都添加以下标黄代码段Q?/font></span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>且在一行显C?/span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>Q?/span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><table style="padding: 0pt 5.4pt; border-collapse: collapse; mso-table-layout-alt: fixed;"><tbody><tr style="height: 84.85pt;"><td style="background: rgb(204, 255, 255); padding: 0pt 5.4pt; border: 0.5pt solid rgb(0, 0, 0); width: 426.1pt; mso-border-left-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-right-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-top-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-bottom-alt: 0.5000pt solid rgb(0, 0, 0);" valign="top" width="568"><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>if [ -z "$LOGGING_MANAGER" ]; then</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager </span><span style='background: rgb(255, 255, 0); color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes"; mso-highlight: rgb(255, 255, 0);'>-Djava.rmi.server.hostname=192.9.100.4</span><span style='background: rgb(255, 255, 0); color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-highlight: rgb(255, 255, 0);'>8</span><span style='background: rgb(255, 255, 0); color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes"; mso-highlight: rgb(255, 255, 0);'>  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'>"</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>else </span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER </span><span style='background: rgb(255, 255, 0); color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes"; mso-highlight: rgb(255, 255, 0);'>-Djava.rmi.server.hostname=192.9.100.48  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port="9004" -Dcom.sun.management.jmxremote.authenticate="false" -Dcom.sun.management.jmxremote.ssl="false"</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'>"</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>fi</span><span style='font-family: "宋体"; font-size: 12pt;'><o:p></o:p></span></p></td></tr></tbody></table><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "Arial"; font-size: 10pt; mso-spacerun: "yes";' class="15">其中<font face="Arial">-Djava.rmi.server.hostname</font><font face="宋体">必设|,否则q程q接会因析到</font><font face="Arial">127.0.0.1</font><font face="宋体">p|Q该的值就是你?/font><font face="Arial">windows</font><font face="宋体">客户端连?/font><font face="Arial">linux</font><font face="宋体">时的</font><font face="Arial">ip</font><font face="宋体">地址</font></span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "Arial"; font-size: 10pt; mso-spacerun: "yes";' class="15">-Dcom.sun.management.jmxremote.port="9004"</span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">设|远E连接端口,</span><span style='color: rgb(51, 51, 51); font-family: "Arial"; font-size: 10pt; mso-spacerun: "yes";' class="15">不要与其他应用冲H?/span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "Arial"; font-size: 10pt; mso-spacerun: "yes";' class="15">ssl<font face="宋体">?/font><font face="Arial">authenticate</font><font face="宋体">讄?/font><font face="Arial">false</font><font face="宋体">Q如果需要安全,请不?/font><font face="Arial">false</font></span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>W?/span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>?/span><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>?/span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>、重?/span><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>tomcat</span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">使用<font face="Arial">root</font><font face="宋体">w䆾dpȝQ进?/font></span><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>%</span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>TOMCAT</span><span style='font-family: "Times New Roman"; font-size: 10.5pt; mso-spacerun: "yes";'>_HOME%/bin</span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'>目录下:</span><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><table style="padding: 0pt 5.4pt; border-collapse: collapse; mso-table-layout-alt: fixed;"><tbody><tr style="height: 61.8pt;"><td style="background: rgb(204, 255, 255); padding: 0pt 5.4pt; border: 0.5pt solid rgb(0, 0, 0); width: 426.1pt; mso-border-left-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-right-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-top-alt: 0.5000pt solid rgb(0, 0, 0); mso-border-bottom-alt: 0.5000pt solid rgb(0, 0, 0);" valign="top" width="568"><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>[root@</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>test</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'> ~]#</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>ps </span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt;'>–</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>ef |grep tomcat </span><span style='color: rgb(255, 102, 0); font-family: "Lucida Console"; font-size: 10pt; font-weight: bold;'>–</span><span style='color: rgb(255, 102, 0); font-family: "宋体"; font-size: 10pt; font-weight: bold; mso-spacerun: "yes";'>-<font face="宋体">输入命o查看是否存在</font><font face="Lucida Console">tomcat</font><font face="宋体">q程</font></span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>[root@</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>test</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'> ~]#</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>./shutdown.sh</span><span style='color: rgb(255, 102, 0); font-family: "宋体"; font-size: 10pt; font-weight: bold; mso-spacerun: "yes";'>--<font face="宋体">停止</font><font face="Lucida Console">tomcat</font><font face="宋体">服务Q如果无效?/font><font face="Lucida Console">kill</font><font face="宋体">命o杀掉进E?/font></span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt;'><o:p></o:p></span></p><p style="text-align: left; line-height: 14.25pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'>[root@</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>test</span><span style='color: rgb(0, 0, 0); font-family: "Lucida Console"; font-size: 10pt; mso-spacerun: "yes";'> ~]</span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";'>#./startup.sh  </span><span style='color: rgb(255, 102, 0); font-family: "宋体"; font-size: 10pt; font-weight: bold; mso-spacerun: "yes";'>--<font face="宋体">启动</font><font face="Lucida Console">tomcat</font><font face="宋体">服务</font></span><span style='color: rgb(0, 0, 0); font-family: "宋体"; font-size: 10pt;'><o:p></o:p></span></p></td></tr></tbody></table><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "宋体"; font-size: 10.5pt; mso-spacerun: "yes";'><o:p></o:p></span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>W?/span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>?/span><span style='font-family: "Times New Roman"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>?/span><span style='font-family: "宋体"; font-size: 10.5pt; font-weight: bold; mso-spacerun: "yes";'>、运?font face="Times New Roman">jconsole</font></span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">q入<font face="Arial">JDK</font><font face="宋体">安装目录</font><font face="Arial">%JDK_HOME%/bin</font><font face="宋体">下,扑ֈ“</font></span><span style='color: rgb(51, 51, 51); font-family: "Arial"; font-size: 10pt; mso-spacerun: "yes";' class="15">jconsole.exe</span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">”Q点击运行ƈ选择【远E】选项卡:</span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">在【主机名?font face="Arial">ip</font><font face="宋体">】输入要q程监控?/font><font face="Arial">tomcat</font><font face="宋体">服务器地址</font></span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">在【端口】输入上文设|的端口P<font face="Arial">9004</font></span><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15"><o:p></o:p></span></p><p style="text-indent: 21pt; margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style='color: rgb(51, 51, 51); font-family: "宋体"; font-size: 10pt; mso-spacerun: "yes";' class="15">【用户名、口令】ؓI,点击【连接】进入监控界面?/span></p><p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"></p><!--EndFragment--> <img src ="http://www.tkk7.com/japper/aggbug/387094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/japper/" target="_blank">japper</a> 2012-09-05 14:16 <a href="http://www.tkk7.com/japper/archive/2012/09/05/387094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TOMCAT获取信息QJMXServiceURL 、JMXConnector 和MBeanServerConnection http://www.tkk7.com/japper/archive/2012/09/05/387092.htmljapperjapperWed, 05 Sep 2012 06:14:00 GMThttp://www.tkk7.com/japper/archive/2012/09/05/387092.htmlhttp://www.tkk7.com/japper/comments/387092.htmlhttp://www.tkk7.com/japper/archive/2012/09/05/387092.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/387092.htmlhttp://www.tkk7.com/japper/services/trackbacks/387092.html

    1. import java.lang.management.MemoryUsage;
    2. import java.text.SimpleDateFormat;
    3. import java.util.Date;
    4. import java.util.Formatter;
    5. import java.util.HashMap;
    6. import java.util.Iterator;
    7. import java.util.Map;
    8. import java.util.Set;
    9. import javax.management.MBeanAttributeInfo;
    10. import javax.management.MBeanInfo;
    11. import javax.management.MBeanServerConnection;
    12. import javax.management.ObjectInstance;
    13. import javax.management.ObjectName;
    14. import javax.management.openmbean.CompositeDataSupport;
    15. import javax.management.remote.JMXConnector;
    16. import javax.management.remote.JMXConnectorFactory;
    17. import javax.management.remote.JMXServiceURL;
    18. public class test {
    19. /**
    20. * @param args
    21. */
    22. public static void main(String[] args) {
    23. try {
    24. String jmxURL = "service:jmx:rmi:///jndi/rmi://192.168.1.126:10090/jmxrmi";//tomcat jmx url
    25. JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
    26. Map map = new HashMap();
    27. String[] credentials = new String[] { "monitorRole", "QED" };
    28. map.put("jmx.remote.credentials", credentials);
    29. JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);
    30. MBeanServerConnection mbsc = connector.getMBeanServerConnection();
    31. //端口最好是动态取?
    32. ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name=http-8089");
    33. MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);
    34. String attrName = "currentThreadCount";//tomcat的线E数对应的属性?
    35. MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
    36. System.out.println("currentThreadCount:" + mbsc.getAttribute(threadObjName, attrName));
    37. //heap
    38. for (int j = 0; j < mbsc.getDomains().length; j++) {
    39. System.out.println("###########" + mbsc.getDomains()[j]);
    40. }
    41. Set MBeanset = mbsc.queryMBeans(null, null);
    42. System.out.println("MBeanset.size() : " + MBeanset.size());
    43. Iterator MBeansetIterator = MBeanset.iterator();
    44. while (MBeansetIterator.hasNext()) {
    45. ObjectInstance objectInstance = (ObjectInstance) MBeansetIterator.next();
    46. ObjectName objectName = objectInstance.getObjectName();
    47. String canonicalName = objectName.getCanonicalName();
    48. System.out.println("canonicalName : " + canonicalName);
    49. if (canonicalName.equals("Catalina:host=localhost,type=Cluster")) {
    50. // Get details of cluster MBeans
    51. System.out.println("Cluster MBeans Details:");
    52. System.out.println("=========================================");
    53. //getMBeansDetails(canonicalName);
    54. String canonicalKeyPropList = objectName.getCanonicalKeyPropertyListString();
    55. }
    56. }
    57. //------------------------- system ----------------------
    58. ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
    59. System.out.println("厂商:" + (String) mbsc.getAttribute(runtimeObjName, "VmVendor"));
    60. System.out.println("E序:" + (String) mbsc.getAttribute(runtimeObjName, "VmName"));
    61. System.out.println("版本:" + (String) mbsc.getAttribute(runtimeObjName, "VmVersion"));
    62. Date starttime = new Date((Long) mbsc.getAttribute(runtimeObjName, "StartTime"));
    63. SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    64. System.out.println("启动旉:" + df.format(starttime));
    65. Long timespan = (Long) mbsc.getAttribute(runtimeObjName, "Uptime");
    66. System.out.println("q箋工作旉:" + test.formatTimeSpan(timespan));
    67. //------------------------ JVM -------------------------
    68. //堆用率
    69. ObjectName heapObjName = new ObjectName("java.lang:type=Memory");
    70. MemoryUsage heapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
    71. "HeapMemoryUsage"));
    72. long maxMemory = heapMemoryUsage.getMax();//堆最?
    73. long commitMemory = heapMemoryUsage.getCommitted();//堆当前分?
    74. long usedMemory = heapMemoryUsage.getUsed();
    75. System.out.println("heap:" + (double) usedMemory * 100 / commitMemory + "%");//堆用率
    76. MemoryUsage nonheapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
    77. "NonHeapMemoryUsage"));
    78. long noncommitMemory = nonheapMemoryUsage.getCommitted();
    79. long nonusedMemory = heapMemoryUsage.getUsed();
    80. System.out.println("nonheap:" + (double) nonusedMemory * 100 / noncommitMemory + "%");
    81. ObjectName permObjName = new ObjectName("java.lang:type=MemoryPool,name=Perm Gen");
    82. MemoryUsage permGenUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(permObjName, "Usage"));
    83. long committed = permGenUsage.getCommitted();//持久堆大?
    84. long used = heapMemoryUsage.getUsed();//
    85. System.out.println("perm gen:" + (double) used * 100 / committed + "%");//持久堆用率
    86. //-------------------- Session ---------------
    87. ObjectName managerObjName = new ObjectName("Catalina:type=Manager,*");
    88. Set<ObjectName> s = mbsc.queryNames(managerObjName, null);
    89. for (ObjectName obj : s) {
    90. System.out.println("应用?" + obj.getKeyProperty("path"));
    91. ObjectName objname = new ObjectName(obj.getCanonicalName());
    92. System.out.println("最大会话数:" + mbsc.getAttribute(objname, "maxActiveSessions"));
    93. System.out.println("会话?" + mbsc.getAttribute(objname, "activeSessions"));
    94. System.out.println("zd会话?" + mbsc.getAttribute(objname, "sessionCounter"));
    95. }
    96. //----------------- Thread Pool ----------------
    97. ObjectName threadpoolObjName = new ObjectName("Catalina:type=ThreadPool,*");
    98. Set<ObjectName> s2 = mbsc.queryNames(threadpoolObjName, null);
    99. for (ObjectName obj : s2) {
    100. System.out.println("端口?" + obj.getKeyProperty("name"));
    101. ObjectName objname = new ObjectName(obj.getCanonicalName());
    102. System.out.println("最大线E数:" + mbsc.getAttribute(objname, "maxThreads"));
    103. System.out.println("当前U程?" + mbsc.getAttribute(objname, "currentThreadCount"));
    104. System.out.println("J忙U程?" + mbsc.getAttribute(objname, "currentThreadsBusy"));
    105. }
    106. } catch (Exception e) {
    107. e.printStackTrace();
    108. }
    109. }
    110. public static String formatTimeSpan(long span) {
    111. long minseconds = span % 1000;
    112. span = span / 1000;
    113. long seconds = span % 60;
    114. span = span / 60;
    115. long mins = span % 60;
    116. span = span / 60;
    117. long hours = span % 24;
    118. span = span / 24;
    119. long days = span;
    120. return (new Formatter()).format("%1$d?%2$02d:%3$02d:%4$02d.%5$03d", days, hours, mins, seconds, minseconds)
    121. .toString();
    122. }
    123. }

    1. import java.util.Iterator;
    2. import java.util.Set;
    3. import javax.management.Attribute;
    4. import javax.management.MBeanInfo;
    5. import javax.management.MBeanServerConnection;
    6. import javax.management.MBeanServerInvocationHandler;
    7. import javax.management.ObjectInstance;
    8. import javax.management.ObjectName;
    9. import javax.management.remote.JMXConnector;
    10. import javax.management.remote.JMXConnectorFactory;
    11. import javax.management.remote.JMXServiceURL;
    12. public class Client {
    13. public static void main(String[] args) throws Exception {
    14. JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
    15. JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
    16. MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
    17. ObjectName mbeanName = new ObjectName("chengang:name=HelloWorld");
    18. // 把所有Domain都打印出?
    19. System.out.println("Domains:---------------");
    20. String domains[] = mbsc.getDomains();
    21. for (int i = 0; i < domains.length; i++) {
    22. System.out.println("\tDomain[" + i + "] = " + domains[i]);
    23. }
    24. // MBean的L
    25. System.out.println("MBean count = " + mbsc.getMBeanCount());
    26. // 对name属性的操作Q属性名的第一个字母要大写Q?
    27. mbsc.setAttribute(mbeanName, new Attribute("Name", "PANDA"));// 讑ր?
    28. System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));// 取?
    29. // 得到proxy代理后直接调用的方式
    30. HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);
    31. proxy.printHello();
    32. proxy.printHello("Raymend");
    33. // q程调用的方?
    34. mbsc.invoke(mbeanName, "printHello", null, null);
    35. mbsc.invoke(mbeanName, "printHello", new Object[] { "熊猫烧香" }, new String[] { String.class.getName() });
    36. // 得mbean的信?
    37. MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
    38. System.out.println("Hello Class: " + info.getClassName());
    39. System.out.println("Hello AttriberQ? + info.getAttributes()[0].getName());
    40. System.out.println("Hello OperationQ? + info.getOperations()[0].getName());
    41. // 得到所有的MBean的ObjectName
    42. System.out.println("all ObjectNameQ?--------------");
    43. Set set = mbsc.queryMBeans(null, null);
    44. for (Iterator it = set.iterator(); it.hasNext();) {
    45. ObjectInstance oi = (ObjectInstance) it.next();
    46. System.out.println("\t" + oi.getObjectName());
    47. }
    48. // 关闭MBeanServerq接
    49. jmxc.close();
    50. }
    51. }


    japper 2012-09-05 14:14 发表评论
    ]]>
    LinkedHashMap和HashMap的比较?http://www.tkk7.com/japper/archive/2012/09/05/387091.htmljapperjapperWed, 05 Sep 2012 06:12:00 GMThttp://www.tkk7.com/japper/archive/2012/09/05/387091.htmlhttp://www.tkk7.com/japper/comments/387091.htmlhttp://www.tkk7.com/japper/archive/2012/09/05/387091.html#Feedback5http://www.tkk7.com/japper/comments/commentRss/387091.htmlhttp://www.tkk7.com/japper/services/trackbacks/387091.html

    ׃现在目中用CLinkedHashMapQƈ不是太熟悉就到网上搜了一下?/p>







    import
    java.util.HashMap;

    import
    java.util.Iterator;

    import
    java.util.LinkedHashMap;

    import
    java.util.Map;

    public
    class TestLinkedHashMap {


      public static
    void main(String
    args[])

      {

       System.out.println("*************************LinkedHashMap*************");

       Map<Integer,String> map = new LinkedHashMap<Integer,String>();

       map.put(6, "apple");

       map.put(3, "banana");

       map.put(2,"pear");

      

       for (Iterator it =  map.keySet().iterator();it.hasNext();)

       {

        Object key = it.next();

        System.out.println(
    key+
    "="+
    map.get(key));

       }

      

       System.out.println("*************************HashMap*************");

       Map<Integer,String>
    map1 =
    new  HashMap<Integer,String>();

       map1.put(6, "apple");

       map1.put(3, "banana");

       map1.put(2,"pear");

      

       for (Iterator it = map1.keySet().iterator();it.hasNext();)

       {

        Object key = it.next();

        System.out.println(
    key+
    "="+
    map1.get(key));

       }

      }

    }


    q行l果如下:


    *************************LinkedHashMap*************
    6=apple
    3=banana
    2=pear
    *************************HashMap**************************
    2=pear
    6=apple
    3=banana


    分析:LinkedHashmap 的特Ҏputq去的对象位|未发生变化,而HashMap会发生变?


    再普及下Q?/p>



    java为数据结构中的映定义了一个接口java.util.Map;它有四个实现c?分别是HashMap
    Hashtable LinkedHashMap 和TreeMap
    .


    Map主要用于存储健值对Q根据键得到|因此不允讔R重复(重复了覆盖了),但允许值重复?/span>
    Hashmap
    是一个最常用的Map,它根据键的HashCode值存储数?Ҏ键可以直接获取它的|h很快的访问速度Q遍历时Q取得数据的序是完全随机的?
    HashMap最多只允许一条记录的键ؓNull;允许多条记录的gؓ
    Null;HashMap不支持线E的同步Q即M时刻可以有多个线E同时写HashMap;可能会导致数据的不一致。如果需要同步,可以?
    Collections的synchronizedMapҎ使HashMaph同步的能力,或者用ConcurrentHashMap?/span>


    Hashtable?
    HashMapcM,它承自Dictionaryc,不同的是:它不允许记录的键或者gؓI?它支持线E的同步Q即M时刻只有一个线E能写Hashtable,因此也导致了
    Hashtable在写入时会比较慢?/span>


    LinkedHashMap
    是HashMap的一个子c,保存了记录的插入序Q在用Iterator遍历LinkedHashMapӞ先得到的记录肯定是先插入?也可以在构造时用带参数Q按照应用次数排序。在遍历的时候会比HashMap慢,不过有种情况例外Q当HashMap定w很大Q实际数据较时Q遍历v来可能会?
    LinkedHashMap慢,因ؓLinkedHashMap的遍历速度只和实际数据有关Q和定w无关Q而HashMap的遍历速度和他的容量有兟?/span>


    TreeMap实现SortMap接口Q能够把它保存的记录Ҏ键排?默认是按键值的升序排序Q也可以指定排序的比较器Q当用Iterator
    遍历TreeMapӞ得到的记录是排过序的?/span>


    一般情况下Q我们用的最多的是HashMap,在Map 中插入、删除和定位元素QHashMap
    是最好的选择。但如果您要按自焉序或自定义顺序遍历键Q那么TreeMap会更好。如果需要输出的序和输入的相同,那么用LinkedHashMap
    可以实现,它还可以按读取顺序来排列.


    HashMap是一个最常用的MapQ它Ҏ键的hashCode值存储数据,Ҏ键可以直接获取它的|h很快的访问速度。HashMap最多只允许一条记录的键ؓNULLQ允许多条记录的gؓNULL?/span>


    HashMap不支持线E同步,即Q一时刻可以有多个线E同时写HashMapQ可能会D数据的不一致性。如果需要同步,可以用Collections的synchronizedMapҎ使HashMaph同步的能力?/span>


    Hashtable与HashMapcMQ不同的是:它不允许记录的键或者gؓI;它支持线E的同步Q即M时刻只有一个线E能写HashtableQ因此也D了Hashtable在写入时会比较慢?/span>


    LinkedHashMap保存了记录的插入序Q在用Iterator遍历LinkedHashMapӞ先得到的记录肯定是先插入的?/span>


    在遍历的时候会比HashMap慢TreeMap能够把它保存的记录根据键排序Q默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMapӞ得到的记录是排过序的?/span>



    japper 2012-09-05 14:12 发表评论
    ]]>
    java synchronized详解 (?http://www.tkk7.com/japper/archive/2012/08/29/386537.htmljapperjapperWed, 29 Aug 2012 09:47:00 GMThttp://www.tkk7.com/japper/archive/2012/08/29/386537.htmlhttp://www.tkk7.com/japper/comments/386537.htmlhttp://www.tkk7.com/japper/archive/2012/08/29/386537.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/386537.htmlhttp://www.tkk7.com/japper/services/trackbacks/386537.htmlC来,很重要?/p>

    Java语言的关键字Q当它用来修C个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线E执行该D代码?

         一、当两个q发U程讉K同一个对象object中的q个synchronized(this)同步代码块时Q一个时间内只能有一个线E得到执行。另一个线E必ȝ待当前线E执行完q个代码块以后才能执行该代码块?/p>

         二、然而,当一个线E访问object的一个synchronized(this)同步代码块时Q另一个线E仍然可以访问该object中的非synchronized(this)同步代码块?/p>

         三、尤其关键的是,当一个线E访问object的一个synchronized(this)同步代码块时Q其他线E对object中所有其它synchronized(this)同步代码块的讉K被d?/p>

         四、第三个例子同样适用其它同步代码块。也是_当一个线E访问object的一个synchronized(this)同步代码块时Q它p得了q个object的对象锁。结果,其它U程对该object对象所有同步代码部分的讉K都被暂时d?/p>

         五、以上规则对其它对象锁同样适用.

    举例说明Q?nbsp;
         一、当两个q发U程讉K同一个对象object中的q个synchronized(this)同步代码块时Q一个时间内只能有一个线E得到执行。另一个线E必ȝ待当前线E执行完q个代码块以后才能执行该代码块?/p>

    package ths;

    public class Thread1 implements Runnable { 
         public void run() { 
              synchronized(this) { 
                   for (int i = 0; i < 5; i++) { 
                        System.out.println(Thread.currentThread().getName() + " synchronized loop " + i); 
                   } 
              } 
         } 
         public static void main(String[] args) { 
              Thread1 t1 = new Thread1(); 
              Thread ta = new Thread(t1, "A"); 
              Thread tb = new Thread(t1, "B"); 
              ta.start(); 
              tb.start(); 
         }    
    }

    l果Q?nbsp;
         A synchronized loop 0 
         A synchronized loop 1 
         A synchronized loop 2 
         A synchronized loop 3 
         A synchronized loop 4 
         B synchronized loop 0 
         B synchronized loop 1 
         B synchronized loop 2 
         B synchronized loop 3 
         B synchronized loop 4

         二、然而,当一个线E访问object的一个synchronized(this)同步代码块时Q另一个线E仍然可以访问该object中的非synchronized(this)同步代码块?/p>

    package ths;

    public class Thread2 { 
         public void m4t1() { 
              synchronized(this) { 
                   int i = 5; 
                   while( i-- > 0) { 
                        System.out.println(Thread.currentThread().getName() + " : " + i); 
                        try { 
                             Thread.sleep(500); 
                        } catch (InterruptedException ie) { 
                        } 
                   } 
              } 
         } 
         public void m4t2() { 
              int i = 5; 
              while( i-- > 0) { 
                   System.out.println(Thread.currentThread().getName() + " : " + i); 
                   try { 
                        Thread.sleep(500); 
                   } catch (InterruptedException ie) { 
                   } 
              } 
         } 
         public static void main(String[] args) { 
              final Thread2 myt2 = new Thread2(); 
              Thread t1 = new Thread(  new Runnable() {  public void run() {  myt2.m4t1();  }  }, "t1"  ); 
              Thread t2 = new Thread(  new Runnable() {  public void run() { myt2.m4t2();   }  }, "t2"  ); 
              t1.start(); 
              t2.start(); 
         }    
    }

    l果Q?nbsp;
         t1 : 4 
         t2 : 4 
         t1 : 3 
         t2 : 3 
         t1 : 2 
         t2 : 2 
         t1 : 1 
         t2 : 1 
         t1 : 0 
         t2 : 0

         三、尤其关键的是,当一个线E访问object的一个synchronized(this)同步代码块时Q其他线E对object中所有其它synchronized(this)同步代码块的讉K被d?/p>

         //修改Thread2.m4t2()ҎQ?nbsp;
         public void m4t2() { 
              synchronized(this) { 
                   int i = 5; 
                   while( i-- > 0) { 
                        System.out.println(Thread.currentThread().getName() + " : " + i); 
                        try { 
                             Thread.sleep(500); 
                        } catch (InterruptedException ie) { 
                        } 
                   } 
              }

         }

    l果Q?/p>

         t1 : 4 
         t1 : 3 
         t1 : 2 
         t1 : 1 
         t1 : 0 
         t2 : 4 
         t2 : 3 
         t2 : 2 
         t2 : 1 
         t2 : 0

         四、第三个例子同样适用其它同步代码块。也是_当一个线E访问object的一个synchronized(this)同步代码块时Q它p得了q个object的对象锁。结果,其它U程对该object对象所有同步代码部分的讉K都被暂时d?/p>

         //修改Thread2.m4t2()Ҏ如下Q?/p>

         public synchronized void m4t2() { 
              int i = 5; 
              while( i-- > 0) { 
                   System.out.println(Thread.currentThread().getName() + " : " + i); 
                   try { 
                        Thread.sleep(500); 
                   } catch (InterruptedException ie) { 
                   } 
              } 
         }

    l果Q?nbsp;
         t1 : 4 
         t1 : 3 
         t1 : 2 
         t1 : 1 
         t1 : 0 
         t2 : 4 
         t2 : 3 
         t2 : 2 
         t2 : 1 
         t2 : 0

         五、以上规则对其它对象锁同样适用:

    package ths;

    public class Thread3 {   
         class Inner {    
              private void m4t1() {    
                   int i = 5;    
                   while(i-- > 0) {    
                        System.out.println(Thread.currentThread().getName() + " : Inner.m4t1()=" + i);    
                        try {    
                             Thread.sleep(500);    
                        } catch(InterruptedException ie) {    
                        }    
                   }    
              }    
              private void m4t2() {    
                   int i = 5;    
                   while(i-- > 0) {    
                        System.out.println(Thread.currentThread().getName() + " : Inner.m4t2()=" + i);    
                        try {    
                             Thread.sleep(500);    
                        } catch(InterruptedException ie) {    
                        }    
                   }    
              }    
         }    
         private void m4t1(Inner inner) {    
              synchronized(inner) { //使用对象?nbsp;   
              inner.m4t1();    
         }    
         private void m4t2(Inner inner) {    
              inner.m4t2();    
         }    
         public static void main(String[] args) {    
              final Thread3 myt3 = new Thread3();    
              final Inner inner = myt3.new Inner();    
              Thread t1 = new Thread( new Runnable() {public void run() { myt3.m4t1(inner);} }, "t1");    
         Thread t2 = new Thread( new Runnable() {public void run() { myt3.m4t2(inner);} }, "t2");    
         t1.start();    
         t2.start();    
      }    
    }

    l果Q?/p>

    管U程t1获得了对Inner的对象锁Q但׃U程t2讉K的是同一个Inner中的非同步部分。所以两个线E互不干扰?/p>

         t1 : Inner.m4t1()=4 
         t2 : Inner.m4t2()=4 
         t1 : Inner.m4t1()=3 
         t2 : Inner.m4t2()=3 
         t1 : Inner.m4t1()=2 
         t2 : Inner.m4t2()=2 
         t1 : Inner.m4t1()=1 
         t2 : Inner.m4t2()=1 
         t1 : Inner.m4t1()=0 
         t2 : Inner.m4t2()=0

    现在在Inner.m4t2()前面加上synchronizedQ?/p>

         private synchronized void m4t2() { 
              int i = 5; 
              while(i-- > 0) { 
                   System.out.println(Thread.currentThread().getName() + " : Inner.m4t2()=" + i); 
                   try { 
                        Thread.sleep(500); 
                   } catch(InterruptedException ie) { 
                   } 
              } 
         }

    l果Q?/p>

    管U程t1与t2讉K了同一个Inner对象中两个毫不相关的部分,但因为t1先获得了对Inner的对象锁Q所以t2对Inner.m4t2()的访问也被阻塞,因ؓm4t2()是Inner中的一个同步方法?/p>

         t1 : Inner.m4t1()=4 
         t1 : Inner.m4t1()=3 
         t1 : Inner.m4t1()=2 
         t1 : Inner.m4t1()=1 
         t1 : Inner.m4t1()=0 
         t2 : Inner.m4t2()=4 
         t2 : Inner.m4t2()=3 
         t2 : Inner.m4t2()=2 
         t2 : Inner.m4t2()=1 
         t2 : Inner.m4t2()=0

    W二:

    synchronized 关键字,它包括两U用法:synchronized Ҏ?synchronized 块?nbsp;
    1. synchronized ҎQ通过在方法声明中加入 synchronized关键字来声明 synchronized Ҏ。如Q?nbsp;
    public synchronized void accessVal(int newVal); 
    synchronized Ҏ控制对类成员变量的访问:每个cd例对应一把锁Q每?synchronized Ҏ都必获得调用该Ҏ的类实例的锁方能

    执行Q否则所属线E阻塞,Ҏ一旦执行,q占该锁,直到从该Ҏq回时才锁释放Q此后被d的线E方能获得该锁,重新q入可执?/p>

    状态。这U机制确保了同一时刻对于每一个类实例Q其所有声明ؓ synchronized 的成员函C臛_只有一个处于可执行状态(因ؓ臛_只有

    一个能够获得该cd例对应的锁)Q从而有效避免了cL员变量的讉K冲突Q只要所有可能访问类成员变量的方法均被声明ؓ synchronizedQ?/p>

    ?nbsp;
    ?Java 中,不光是类实例Q每一个类也对应一把锁Q这h们也可将cȝ静态成员函数声明ؓ synchronized Q以控制其对cȝ静态成

    员变量的讉K?nbsp;
    synchronized Ҏ的缺P若将一个大的方法声明ؓsynchronized 会大大影响效率Q典型地Q若线E类的方?run() 声明?/p>

    synchronized Q由于在U程的整个生命期内它一直在q行Q因此将D它对本类M synchronized Ҏ的调用都永远不会成功。当然我们可

    以通过访问类成员变量的代码放C门的Ҏ中,其声明?synchronized Qƈ在主Ҏ中调用来解决q一问题Q但?Java 为我们提?/p>

    了更好的解决办法Q那是 synchronized 块?nbsp;
    2. synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下: 
    synchronized(syncObject) { 
    //允许讉K控制的代?nbsp;

    synchronized 块是q样一个代码块Q其中的代码必须获得对象 syncObject Q如前所qͼ可以是类实例或类Q的锁方能执行,具体?/p>

    制同前所q。由于可以针对Q意代码块Q且可Q意指定上锁的对象Q故灉|性较高?nbsp;
    对synchronized(this)的一些理?nbsp;   
    一、当两个q发U程讉K同一个对象object中的q个synchronized(this)同步代码块时Q一个时间内只能有一个线E得到执行。另一个线

    E必ȝ待当前线E执行完q个代码块以后才能执行该代码块?nbsp;
    二、然而,当一个线E访问object的一个synchronized(this)同步代码块时Q另一个线E仍然可以访问该object中的非synchronized

    (this)同步代码块?nbsp;
    三、尤其关键的是,当一个线E访问object的一个synchronized(this)同步代码块时Q其他线E对object中所有其它synchronized(this)

    同步代码块的讉K被d?nbsp;
    四、第三个例子同样适用其它同步代码块。也是_当一个线E访问object的一个synchronized(this)同步代码块时Q它p得了q个

    object的对象锁。结果,其它U程对该object对象所有同步代码部分的讉K都被暂时d?nbsp;
    五、以上规则对其它对象锁同样适用

    http://hi.baidu.com/sunshibing/blog/item/5235b9b731d48ff430add14a.html
    java中synchronized用法

    打个比方Q一个object像一个大房子Q大门永q打开。房子里?很多戉KQ也是ҎQ?/p>

    q些戉K有上锁的QsynchronizedҎQ, 和不上锁之分Q普通方法)。房门口攄一把钥匙(keyQ,q把钥匙可以打开所有上锁的戉K?/p>

    另外我把所有想调用该对象方法的U程比喻成想q入q房子某?戉K的h。所有的东西p么多了,下面我们看看q些东西之间如何作用的?/p>

    在此我们先来明确一下我们的前提条g。该对象臛_有一个synchronizedҎQ否则这个keyq有啥意义。当然也׃会有我们的这个主题了?/p>

    一个h惌入某间上了锁的房_他来到房子门口,看见钥匙在那儿(说明暂时q没有其他h要用上锁的 戉KQ。于是他CLC钥匙

    Qƈ且按照自?的计划用那些房间。注意一点,他每ơ用完一ơ上锁的戉K后会马上把钥匙还回去。即使他要连l用两间上锁的戉KQ?/p>

    中间他也要把钥匙q回去,再取回来?/p>

    因此Q普通情况下钥匙的用原则是Q?#8220;随用随借,用完卌?#8221;

    q时其他人可以不受限制的使用那些不上锁的戉KQ一个h用一间可以,两个人用一间也可以Q没限制。但是如果当某个人想要进入上锁的?/p>

    _他就要跑到大门口ȝ看了。有钥匙当然拿了pQ没有的话,只能等了?/p>

    要是很多人在{这把钥匙,{钥匙还回来以后Q谁会优先得到钥匙?Not guaranteed。象前面例子里那个想q箋使用两个上锁戉K的家伙,?/p>

    中间q钥匙的时候如果还有其他h在等钥匙Q那么没有Q何保证这家伙能再ơ拿到?QJAVA规范在很多地斚w明确说明不保证,?/p>

    Thread.sleep()休息后多久会q回q行Q相同优先权的线E那个首先被执行Q当要访问对象的锁被 释放后处于等待池的多个线E哪个会优先?/p>

    刎ͼ{等。我xl的军_权是在JVMQ之所以不保证Q就是因为JVM在做Zq决定的时候,l不是简单单Ҏ 一个条件来做出判断Q而是

    Ҏ很多条。而由于判断条件太多,如果说出来可能会影响JAVA的推q,也可能是因ؓ知识产权保护的原因吧。SUNl了个不保证 ؜q去?/p>

    。无可厚非。但我相信这些不定Qƈ非完全不定。因机q东西本w就是按指oq行的。即使看h很随机的现象Q其实都是有规律

    可寻。学q?计算机的都知道,计算机里随机数的学名是伪随机敎ͼ是hq用一定的Ҏ写出来的Q看上去随机|了。另外,或许是因惛_

    的确定太费事Q也没多大意义,所 以不定׃定了吧。)

    再来看看同步代码块。和同步Ҏ有小的不同?/p>

    1.从尺怸Ԍ同步代码块比同步Ҏ。你可以把同步代码块看成是没上锁戉K里的一块用带锁的屏风隔开的空间?/p>

    2.同步代码块还可以Zؓ的指定获得某个其它对象的key。就像是指定用哪一把钥匙才能开q个屏风的锁Q你可以用本房的钥匙Q你也可以指?/p>

    用另一个房子的钥匙才能开Q这L话,你要跑到另一栋房子那儿把那个钥匙拿来Qƈ用那个房子的钥匙来打开q个房子的带锁的屏风?/p>

             C你获得的那另一栋房子的钥匙Qƈ不媄响其他hq入那栋房子没有锁的戉K?/p>

             Z么要使用同步代码块呢Q我惛_该是q样的:首先对程序来讲同步的部分很媄响运行效率,而一个方法通常是先创徏一些局部变

    量,再对q些变量做一?操作Q如q算Q显C等{;而同步所覆盖的代码越多,Ҏ率的影响p严重。因此我们通常量~小其媄响范围?/p>

    如何做?同步代码块。我们只把一个方法中该同 步的地方同步Q比如运?/p>

             另外Q同步代码块可以指定钥匙q一特点有个额外的好处,是可以在一定时期内霸占某个对象的key。还记得前面说过普通情况下?/p>

    匙的使用原则吗。现在不是普通情况了。你所取得的那把钥匙不是永q不q,而是在退出同步代码块时才q?/p>

              q用前面那个惌l用两个上锁戉K的家伙打比方。怎样才能在用完一间以后,l箋使用另一间呢。用同步代码块吧。先创徏另外

    一个线E,做一个同步代?块,把那个代码块的锁指向q个房子的钥匙。然后启动那个线E。只要你能在q入那个代码块时抓到q房子的钥匙

    Q你可以一直保留到退出那个代码块。也是?你甚臛_以对本房内所有上锁的戉K遍历Q甚臛_sleep(10*60*1000)Q而房门口却还?/p>

    1000个线E在{这把钥匙呢。很q瘾吧?/p>

              在此对sleep()Ҏ和钥匙的兌性讲一下。一个线E在拿到key后,且没有完成同步的内容Ӟ如果被强制sleep()了,那keyq一

    直在 它那ѝ直到它再次q行Q做完所有同步内容,才会归还key。记住,那家伙只是干zd累了Q去休息一下,他ƈ没干完他要干的事。ؓ

    了避免别入那个房?把里面搞的一团糟Q即使在睡觉的时候他也要把那唯一的钥匙戴在n上?/p>

              最后,也许有h会问Qؓ什么要一把钥匙通开Q而不是一个钥匙一个门呢?我想q纯_Ҏ因ؓ复杂性问题。一个钥匙一个门当然?/p>

    安全Q但是会牉|好多问题。钥?的生,保管Q获得,归还{等。其复杂性有可能随同步方法的增加呈几何数增加,严重影响效率。这?/p>

    是一个权衡的问题吧。ؓ了增加一点点安全性,D?率大大降低,是多么不可取啊?/p>

    synchronized的一个简单例?/p>

    public class TextThread {

    public static void main(String[] args) {   
       TxtThread tt = new TxtThread();    
       new Thread(tt).start();    
       new Thread(tt).start();    
       new Thread(tt).start();    
       new Thread(tt).start();    
    }    
    }

    class TxtThread implements Runnable {   
    int num = 100;    
    String str = new String();

    public void run() {   
       synchronized (str) {    
        while (num > 0) {

         try {   
          Thread.sleep(1);    
         } catch (Exception e) {    
          e.getMessage();    
         }    
         System.out.println(Thread.currentThread().getName()    
           + "this is " + num--);    
        }    
       }    
    }    
    }

    上面的例子中Z刉一个时间差,也就是出错的Z,使用了Thread.sleep(10)

    Java对多U程的支持与同步机制深受大家的喜爱,g看v来用了synchronized关键字就可以L地解军_U程׃n数据同步问题。到底如

    何?――q得对synchronized关键字的作用q行深入了解才可定论?/p>

    ȝ说来Qsynchronized关键字可以作为函数的修饰W,也可作ؓ函数内的语句Q也是qx说的同步Ҏ和同步语句块。如果再l的分类Q?/p>

    synchronized可作用于instance变量、object referenceQ对象引用)、static函数和class literals(cdU字面常?w上?/p>

    在进一步阐qC前,我们需要明几点:

    AQ无论synchronized关键字加在方法上q是对象上,它取得的锁都是对象,而不是把一D代码或函数当作?#8213;―而且同步Ҏ很可能还会被?/p>

    他线E的对象讉K?/p>

    BQ每个对象只有一个锁QlockQ与之相兌?/p>

    CQ实现同步是要很大的pȝ开销作ؓ代h的,甚至可能造成死锁Q所以尽量避免无谓的同步控制?/p>

    接着来讨论synchronized用到不同地方对代码生的影响Q?/p>

    假设P1、P2是同一个类的不同对象,q个cM定义了以下几U情늚同步块或同步ҎQP1、P2都可以调用它们?/p>

    1Q?把synchronized当作函数修饰W时Q示例代码如下:

    Public synchronized void methodAAA()

    {

    //….

    }

    q也是同步ҎQ那q时synchronized锁定的是哪个对象呢?它锁定的是调用这个同步方法对象。也是_当一个对象P1在不同的U程?/p>

    执行q个同步ҎӞ它们之间会Ş成互斥,辑ֈ同步的效果。但是这个对象所属的Class所产生的另一对象P2却可以Q意调用这个被加了

    synchronized关键字的Ҏ?/p>

    上边的示例代码等同于如下代码Q?/p>

    public void methodAAA()

    {

    synchronized (this)      // (1)

    {

           //…..

    }

    }

    (1)处的this指的是什么呢Q它指的是调用q个Ҏ的对象,如P1。可见同步方法实质是synchronized作用于object reference?#8213;―那个

    拿到了P1对象锁的U程Q才可以调用P1的同步方法,而对P2而言QP1q个锁与它毫不相qԌE序也可能在q种情Ş下摆脱同步机制的控制Q?/p>

    成数据؜乱:Q?/p>

    2Q同步块Q示例代码如下:

    public void method3(SomeObject so)

    {

        synchronized(so)

        {   
           //…..    
        }

    }

    q时Q锁是soq个对象Q谁拿到q个锁谁可以运行它所控制的那D代码。当有一个明的对象作ؓ锁时Q就可以q样写程序,但当没有?/p>

    的对象作ؓ锁,只是惌一D代码同步时Q可以创Z个特D的instance变量Q它得是一个对象)来充当锁Q?/p>

    class Foo implements Runnable

    {

            private byte[] lock = new byte[0]; // Ҏ的instance变量

            Public void methodA()   
            {

               synchronized(lock) { //… }

            }

            //…..

    }

    注:雉度的byte数组对象创徏h比M对象都经?#8213;―查看~译后的字节码:生成雉度的byte[]对象只需3条操作码Q而Object lock

    = new Object()则需?行操作码?/p>

    3Q将synchronized作用于static 函数Q示例代码如下:

    Class Foo   
    {

        public synchronized static void methodAAA()   // 同步的static 函数   
        {    
            //….    
        }

        public void methodBBB()   
        {

           synchronized(Foo.class)   // class literal(cdU字面常?

        }   
    }

       代码中的methodBBB()Ҏ是把class literal作ؓ锁的情况Q它和同步的static函数产生的效果是一LQ取得的锁很特别Q是当前调用q?/p>

    个方法的对象所属的c(ClassQ而不再是p个Class产生的某个具体对象了Q?/p>

    记得在《Effective Java》一书中看到q将 Foo.class?P1.getClass()用于作同步锁q不一P不能用P1.getClass()来达到锁q个Class?/p>

    目的。P1指的是由FoocM生的对象?/p>

    可以推断Q如果一个类中定义了一个synchronized的static函数AQ也定义了一个synchronized 的instance函数BQ那么这个类的同一对象Obj

    在多U程中分别访问A和B两个ҎӞ不会构成同步Q因为它们的锁都不一栗AҎ的锁是Objq个对象Q而B的锁是Obj所属的那个Class?/p>

    结如下Q?/p>

    搞清楚synchronized锁定的是哪个对象Q就能帮助我们设计更安全的多U程E序?/p>

    q有一些技巧可以让我们对共享资源的同步讉K更加安全Q?/p>

    1Q?定义private 的instance变量+它的 getҎQ而不要定义public/protected的instance变量。如果将变量定义为publicQ对象在外界可以

    l过同步Ҏ的控制而直接取得它Qƈ改动它。这也是JavaBean的标准实现方式之一?/p>

    2Q?如果instance变量是一个对象,如数l或ArrayList什么的Q那上述Ҏ仍然不安全,因ؓ当外界对象通过getҎ拿到q个instance对象

    的引用后Q又其指向另一个对象,那么q个private变量也就变了Q岂不是很危险?q个时候就需要将getҎ也加上synchronized同步Qƈ

    且,只返回这个private对象的clone()――q样Q调用端得到的就是对象副本的引用?/p>

    japper 2012-08-29 17:47 发表评论
    ]]>
    MyEclipse的一些配|及优化http://www.tkk7.com/japper/archive/2012/07/20/383573.htmljapperjapperFri, 20 Jul 2012 02:25:00 GMThttp://www.tkk7.com/japper/archive/2012/07/20/383573.htmlhttp://www.tkk7.com/japper/comments/383573.htmlhttp://www.tkk7.com/japper/archive/2012/07/20/383573.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/383573.htmlhttp://www.tkk7.com/japper/services/trackbacks/383573.html

    1. 先安装MyEclipse,安装MyEclipse7.5需要VPN代理Q安装过E大概持l?0-15分钟Q用VPN试帐号卛_

    2. q行MyEclipse的配|,
          从菜单栏中进?#8220;Windows --> Preferences”

    3. 先要q行JDK的配|,
        在左侧栏中选择“Java --> Installed JREs”Q?
        ?#8220;Add”按钮q行d

    4. 在弹出的“Add JRE”画面中,选择JRE的目录,
        是选择你所在的JDK的目录,我的为:C:\Program Files\Java\jre6
        在JRE名称一栏中Q填下想取的名称Q我q里?#8220;HiJackson's JRE”Q?
        然后“OK”定

    5. q回到设|框中,刚刚配|的JRE选中

    6. Tomcat Server设ؓ可用Qƈ讄Tomcat的安装目?

    7. 在Tomcat的JDK中选择刚刚配置的JDK

    8. 配置完成了,三个地方可以启动它的服务Q根据自q喜好吧~~~




     

     

    优化MyEclipseQ?/h2>

    1、去除不需要加载的模块

    一个系l?0%的功能往往能够满80%的需求,MyEclipse也不例外Q我们在大多数时候只需?0%的系l功能,所以可以将一些不使用的模块禁?加蝲启动。通过Windows - Preferences打开配置H口Q依ơ选择左侧的General - Startup and ShutdownQ这个时候在右侧显C出了Eclipse启动时加载的模块Q可以根据自q实际情况去除一些模块?
    windows–>perferences–>general–>startup and shutdown

    x没用的启动项Q?

    WTP Q一个跟myeclipse差不多的东西Q主要差别是 WTP 是免费的Q如果用myeclipseQ这个可以取?
    MylynQ组队Q务管理工PcM?CVS Q以d为单位管理项目进度,没用到的可以取消
    DerbyQ一U保存成 jar 形式的数据库Q我没用刎ͼ取消
    一大排?MyEclipse EASIE 打头的启动项Qmyeclipse 支持的服务器Q只选自q的,其他取消Q比如我只选了tomcat6.x

    2、取消MyEclipse在启动时自动验证目配置文g

    默认情况下MyEclipse在启动的时候会自动验证每个目的配|文Ӟq是一个非常耗时的过E,
    可以在PreferencesH口依次选择 MyEclipse Enterprise Workbench - ValidationQ然后在右侧的Validator列表中只保留 Manual 就可以?Manual全部N,Bulid只留下W一??
    如果需要验证的时候只需要选中文gQ然后右键选择 MyEclipse - Run Validation可以了?

    windows–>perferences–>myeclipse–>validation
    ?除了manual 下面的全部点掉,build下只?classpath dependency Validator

    手工验证ҎQ?

    在要验证的文件上Q单击鼠标右?#8211;>myeclipse–>run validation


    3、去掉拼写检查(如果你觉的有用可以不去)

    拼写查会l我们带来不的ȝQ我们的Ҏ命名都会是单词的~写Q他也会提示有错Q所以最好去掉,没有多大的用处:
    windows–>perferences–>general–>validation->editors->Text Editors->spelling

    myeclipse 打开 jsp 的默认编辑器不好Q会同时打开预览
    windows–>perferences–>general–>editors->file associations,

    把默认改?MyEclipse JSP EditorQ)
    原默认的jsp~辑器是 MyEclipse Visual JSP DesignerQ顾名思义Q此~译器是jsp可视化编辑器Q对于初学者有很多的帮助,
    但修Ҏ的默认~辑器其实可以提高启动速度Q?

    4、关闭自动更?

    如果是myeclipse7.5Q?

    Q?Q关掉maven自动更新Q?

    window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-Maven,
    关闭所有Download和Update开头的选项Q共四项Q去掉前面的勾)

    Q?Q关闭更新调度:window –> preferences –> General –> Startup and Shutdown –> Automatic Updates SchedulerQ去掉前面的勾)

    Q?Qwindow –> preferences –>Myeclipse Dashboard,关闭Show……on start

    5、加大JVM的非堆内?

    打开 myeclipse.ini
    -startup
    ../Common\plugins\org.eclipse.equinox.launcher_1.0.101.R34x_v20081125.jar
    --launcher.library
    ../Common\plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.101.R34x_v20080731
    -clean
    -configuration
    configuration
    -vm
    C:\Users\lenovo\AppData\Local\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\jre\bin\client\jvm.dll
    -vmargs
    -Xmx384m
    -XX:MaxPermSize=384m
    -XX:ReservedCodeCacheSize=96m

    以上是我的myeclipse.iniQ需要修Ҏ-XmxQ?XX:MaxPermSizeQ?XX:ReservedCodeCacheSizeQ?
    这三项的D大,但ƈ不是大好Q曾l在相同的条件下做过试Q内?GBQ,-XmxQ?XX:MaxPermSize的gؓ384m时比512m时要快(视具体的计算定Q,
    -XmxQ?XX:MaxPermSize的D为同样大且两者之和不能超Z的计机本n的内存大?

    6、window-preferences-MyEclipse Enterprise Workbench-Maven4MyEclipse-MavenQ将Maven JDK改ؓ电脑上安装的JDKQ即不用myeclipse提高的JDK
    登记add按钮Q选择你的电脑上的JDK卛_Q注意:不是JREQ我的gؓQJava6.014Q?

    7、window-preferences-MyEclipse Enterprise Workbench-Matisse4Myeclipse/Swing,Design-time information(dt.jar) location 改用电脑安装的JDK的dt.jar
    Q即不用myeclipse提供的dt.jarQ我的gؓQC:\Java6.014\lib\dt.jarQ?

    l过以上的优化,myeclipse的启动时间可以减?/3QTomcat的启动速度可以减少1/2(视具体情况而定)Q?

    特别6Q?两项的优化效果最明显Q?

    如果只进行前5,优化的效果有限,短期内确实可以提高启动速度Q但是大概半个月后又会变的很慢(具体原因不明Q?
    另外Q用myeclipse一D|间后Q就会生很多项目,即ɘq些目是处于关闭状态,myecliose在启动时也会加蝲q些目Q这个过E会p很多旉Q所以,不用的目都delete掉,用的时候再import

    在用[MyEclipse] 写代码很Ҏ卡死机,其是在对JSP文g的﹤%%H之间写代码的时候,只要一弹出提示qd死,E序失去响应Q我以ؓ是MyEclipse版本的问题,l果换了6.0?H?.5?H?.0版全都一PN是我机子的问题?可是q原pȝ后用q是一Ll果?/p>

    癑ֺ一下你q道,但是癑ֺ了N下才扑ֈ了一些门路,搜烦也讲I技巧,换了N个[关键字] l合才搜出来。说是MyEclipse在智能提C的时候自动访问网l上sun公司的最新API文档Q只要关闭掉|络q接可以了。我试了试断开|络然后在用MyEclipse写代码,l果q真的搞定了。可是,我M能因Zq就不上|了吧,l箋接着癑ֺQ找C两全其美的解x法?/p>

    在自己创建的工程名上右键Q选择Properties--H在打开的窗口中点击Java Build Path--H单击Libraries选项卡,扑ֈ如图中标?所C的地方--H选择双的Remove更改成如标记1所C的样子--H点击OK?/p>




    japper 2012-07-20 10:25 发表评论
    ]]>jqueryW记0717http://www.tkk7.com/japper/archive/2012/07/17/383298.htmljapperjapperTue, 17 Jul 2012 03:21:00 GMThttp://www.tkk7.com/japper/archive/2012/07/17/383298.htmlhttp://www.tkk7.com/japper/comments/383298.htmlhttp://www.tkk7.com/japper/archive/2012/07/17/383298.html#Feedback0http://www.tkk7.com/japper/comments/commentRss/383298.htmlhttp://www.tkk7.com/japper/services/trackbacks/383298.html
    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("button").click(function(){
      $("p").toggle();
      });
    });
    </script>
    </head>
    <body>
    <button type="button">切换</button>
    <p>This is a paragraph with little content.</p>
    <p>This is another small paragraph.</p>
    </body>
    </html>

    2、append() 函数向所匚w?HTML 元素内部q加内容$(selector).append(content);
    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(
    function(){
      $(
    "button").click(function(){
      $(
    "p").append(" <b>W3School</b>.");
      }
    );
    }
    );
    </script>
    </head>

    <body>
    <h2>This is a heading</h2>
    <p>This is a paragraph.</p>
    <p>This is another paragraph.</p>
    <button type="button">L击这?/span></button>
    </body>

    </html>
    cM的还有:
    $(selector).html(content) 改变被选元素的Q内部)HTML
    $(selector).append(content) 向被选元素的Q内部)HTML q加内容
    $(selector).prepend(content) 向被选元素的Q内部)HTML “预置”QPrependQ内?
    $(selector).after(content) 在被选元素之后添?HTML
    $(selector).before(content) 在被选元素之前添?HTML

    3、css操作Q函?css({properties}) 同时为所有匹配元素的一pd CSS 属性设||
    $(selector).css({properties})
    $("p").css({"background-color":"red","font-size":"200%"});

    jQuery 拥有两种用于寸操作的重要函敎ͼ

    • $(selector).height(value)
    • $(selector).width(value)
    ȝ如:
    $(selector).css(name,value) 为匹配元素设|样式属性的?
    $(selector).css({properties}) 为匹配元素设|多个样式属?
    $(selector).css(name) 获得W一个匹配元素的样式属性?
    $(selector).height(value) 讄匚w元素的高?
    $(selector).width(value) 讄匚w元素的宽?

    4、AJAXQ?br />

    jQuery AJAX h
    $(selector).load(url,data,callback) 把远E数据加载到被选的元素?
    $.ajax(options) 把远E数据加载到 XMLHttpRequest 对象?
    $.get(url,data,callback,type) 使用 HTTP GET 来加载远E数?
    $.post(url,data,callback,type) 使用 HTTP POST 来加载远E数?
    $.getJSON(url,data,callback) 使用 HTTP GET 来加载远E?JSON 数据
    $.getScript(url,callback) 加蝲q执行远E的 JavaScript 文g

    (url) 被加载的数据?URLQ地址Q?/p>

    (data) 发送到服务器的数据的键/值对?/p>

    (callback) 当数据被加蝲Ӟ所执行的函?/p>

    (type) 被返回的数据的类?(html,xml,json,jasonp,script,text)

    (options) 完整 AJAX h的所有键/值对选项

    略。。?br />



















    japper 2012-07-17 11:21 发表评论
    ]]>
    使用jxl导出大数据量EXCEL时内存溢出的解决办法http://www.tkk7.com/japper/archive/2012/07/16/383208.htmljapperjapperMon, 16 Jul 2012 03:48:00 GMThttp://www.tkk7.com/japper/archive/2012/07/16/383208.htmlhttp://www.tkk7.com/japper/comments/383208.htmlhttp://www.tkk7.com/japper/archive/2012/07/16/383208.html#Feedback1http://www.tkk7.com/japper/comments/commentRss/383208.htmlhttp://www.tkk7.com/japper/services/trackbacks/383208.html1、通过jx1最新版本的采用临时文g写入EXCEL功能Q设定时文件的位置Q可以有效的避免内存溢出Q?
                wbSetting.setUseTemporaryFileDuringWrite(true);   
                wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文g夹的位置


    2、EXCEL获取的list集合先读取数据总行敎ͼ再通过ROWNUMq行控制Q设定每ơ读取多行数据Q比如一个List讑֮?0000Q?
                WorkbookSettings wbSetting = new WorkbookSettings();   
                wbSetting.setUseTemporaryFileDuringWrite(true);   
                wbSetting.setTemporaryFileDuringWriteDirectory(new File(excelPath));//临时文g夹的位置
                workbook = Workbook.createWorkbook(new File(fullPath),wbSetting);
                int returnCount=0;
                if(null!=pager)
                {
                    returnCount = BrasDatabase.getReturnCount(pager.getStartTime(),
                            pager.getEndTime(), pager);
                }

                if (returnCount > 0) {    
                    pager.setPageSize(50000);
                    pager.setTotalRows(returnCount);// 获取总行?br />                pager.setNewTotalPages(pager.getTotalRows()); // 总页?br />                for (int i = 1; i 
    <= pager.getTotalPages(); i++) {
                        pager.setCurrentPage(i); // 当前面d
                        List<BrasAuth
    > list = BrasDatabase
                                .getBrasAuthResultByIpToExcelList(pager
                                        .getStartTime(), pager.getEndTime(), pager);
                        this.createExcel(list,excelFilePath);
                        list.clear();
                    }
                }



    3、在写入EXCEL的时候,读取的LIST分割Q每50000条数据生成一个EXCEL的sheetQ一个sheet最多能存储60000多行数据Q,再写入,写入的时候,如果讄了采用时文件写入的话,jx1会自动采用生成时文件的方式写入EXCELQ?br />
            for(int i=1;i<=list.size();i++)
            {
                if(i%50000
    ==0)
                
    {
                    sheetName
    =format.format(new Date());
                    toExcel(list.subList(reNum, i),sheetName);
                    reNum
    =i;
                
    }
            }


    japper 2012-07-16 11:48 发表评论
    ]]>
    վ֩ģ壺 ޾Ʒٸ30P| ĻMVƵ3| ޹Ʒ˾Ʒ | ձ12| Ʒ߹ۿ| ޹Ʒ۲ӰԺþ| һһ| ޵һƵ߹ۿ| պAVר| ɫ18վWWW߲| þþƷ7777| Ůˬ̼ƵѲ| һ˿Ƶ| ŮƵ| ҹƷһ߲ŷ| 99þƷƵ77| Ʒ| Ʒ鶹123| ޹Ʒ| ˊ]Ƭѹۿ| þѸƵ| þѾƷav| ޹Ʒ| 㻨߹ۿѹۿ| Դ߹ۿѰ| þ޾Ʒ| Ļ| þþƷƷް| Ļ| һëƬaѲɫӰ | Ƶ߹ۿ| ˵վ| AV12þ| ߹ۿѹۿ| ůůձ| ƷѴƬһ| hƵѹۿ| һɫþ88޾Ʒۺ | AëƬƵ| ѾþþƷ99þ| Ƶվ߹ۿ|