2012年9月5日
#
- import Java.util.*;
- public class ShowDate {
- public static void main(String[] args) {
- Calendar calendar = new GregorianCalendar();
- Date trialTime = new Date();
- calendar.setTime(trialTime);
-
- 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);
- 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));
Android SDK下載和更新失敗的解決方法
最近剛換了電腦,開始搭建Android開發環境的時候,下載SDK總是會出現如下錯誤:
1.Failed to fetch URL http://dl-ssl.google.com/Android/repository/addons_list-1.xml.
據說dl-ssl.google.com在大陸被強了,偉大的天朝真是不讓人活了,解決方法就是修改C:\Windows\System32\drivers\etc\hosts文件。添加一行:
1.74.125.237.1 dl-ssl.google.com
這里需要注意的是hosts文件是只讀的,我們沒有權限修改,需要我們將hosts文件復制到桌面或者其他地方,然后修改,代碼如下:
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.//親,就是增加這一句哦
23.74.125.237.1 dl-ssl.google.com
然后保存,復制修改后的hosts文件到C:\Windows\System32\drivers\etc 目錄,替換文件就好!!!我們再次下載SDK的時候就會成功啦,如下圖:
嘿嘿,大功告成啦!!!
PS:補充下,在mac或Linux中,hosts文件所在位置為/etc/hosts,可以使用sudo vim /etc/hosts來編輯。
Tomcat 6.0.35 的功能有些不同于Tomcat 6.0.20。我下載的Tomcat 6.0.35是免安裝的,而以前使用的Tomcat 6.0.20是需要安裝的,而且Tomcat 6.0.20 的安裝密碼,即進入Tomcat Manager 這個地方的密碼是在安裝的時候指定的,但是呢,Tomcat 6.0.35 由于是免安裝的,所以就沒有地方去指定密碼了,當我們訪問Tomcat 6.0.35 的Tomcat Manager的時候 ,輸入以前默認的用戶名:admin 密碼為空,會發現出現了403 錯誤,即access deny 。調試了好久,最后終于找出原因了。根據403頁面的提示,需要在tomcat的配置文件中(即conf/tomcat-users.xml)加入
<role rolename="manager-gui"/>
<user username="admin" password="" roles="manager-gui"/>
有一點必須注意,其中的rolename 必須是“manager-gui” ,更改成admin 或者 admin-gui,都不好用,而下面的username password是可以任意的,但是后面的roles 必須和上面role 中的rolename相同。
通過 jconsole查看tomcat運行情況的配置方法
——基于JDK1.5、Linux(Redhat5.5)、Tomcat6
由于項目的原因,需要使用jconsole對tomcat進行遠程監控,結合網上的資料對配置方法進行了總結。
第一步、配置tomcat
打開%TOMCAT_HOME%/bin下的文件catalina.sh,搜索“JAVA_OPTS”找到下面這行:
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi
在每個“JAVA_OPTS”后邊都添加以下標黃代碼段,且在一行顯示:
if [ -z "$LOGGING_MANAGER" ]; then JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -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"" else JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -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"" fi |
其中-Djava.rmi.server.hostname項必須設置,否則遠程連接會因為解析到127.0.0.1失敗,該項的值就是你在windows客戶端連接linux時的ip地址
-Dcom.sun.management.jmxremote.port="9004"項設置遠程連接端口,不要與其他應用沖突
ssl和authenticate設置為false,如果需要安全,請不要false
第二步、重啟tomcat
使用root身份登錄系統,進入%TOMCAT_HOME%/bin目錄下:
[root@test ~]#ps –ef |grep tomcat –-輸入命令查看是否存在tomcat進程 [root@test ~]#./shutdown.sh--停止tomcat服務,如果無效使用kill命令殺掉進程 [root@test ~]#./startup.sh --啟動tomcat服務 |
第三步、運行jconsole
進入JDK安裝目錄%JDK_HOME%/bin下,找到“jconsole.exe”,點擊運行并選擇【遠程】選項卡:
在【主機名或ip】輸入要遠程監控的tomcat服務器地址
在【端口】輸入上文設置的端口號:9004
【用戶名、口令】為空,點擊【連接】進入監控界面。
- import java.lang.management.MemoryUsage;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Formatter;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
-
- import javax.management.MBeanAttributeInfo;
- import javax.management.MBeanInfo;
- import javax.management.MBeanServerConnection;
- import javax.management.ObjectInstance;
- import javax.management.ObjectName;
- import javax.management.openmbean.CompositeDataSupport;
- import javax.management.remote.JMXConnector;
- import javax.management.remote.JMXConnectorFactory;
- import javax.management.remote.JMXServiceURL;
-
- public class test {
-
-
-
- public static void main(String[] args) {
- try {
-
- String jmxURL = "service:jmx:rmi:///jndi/rmi://192.168.1.126:10090/jmxrmi";//tomcat jmx url
- JMXServiceURL serviceURL = new JMXServiceURL(jmxURL);
-
- Map map = new HashMap();
- String[] credentials = new String[] { "monitorRole", "QED" };
- map.put("jmx.remote.credentials", credentials);
- JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map);
- MBeanServerConnection mbsc = connector.getMBeanServerConnection();
-
-
- ObjectName threadObjName = new ObjectName("Catalina:type=ThreadPool,name=http-8089");
- MBeanInfo mbInfo = mbsc.getMBeanInfo(threadObjName);
-
- String attrName = "currentThreadCount";
- MBeanAttributeInfo[] mbAttributes = mbInfo.getAttributes();
- System.out.println("currentThreadCount:" + mbsc.getAttribute(threadObjName, attrName));
-
-
- for (int j = 0; j < mbsc.getDomains().length; j++) {
- System.out.println("###########" + mbsc.getDomains()[j]);
- }
- Set MBeanset = mbsc.queryMBeans(null, null);
- System.out.println("MBeanset.size() : " + MBeanset.size());
- Iterator MBeansetIterator = MBeanset.iterator();
- while (MBeansetIterator.hasNext()) {
- ObjectInstance objectInstance = (ObjectInstance) MBeansetIterator.next();
- ObjectName objectName = objectInstance.getObjectName();
- String canonicalName = objectName.getCanonicalName();
- System.out.println("canonicalName : " + canonicalName);
- if (canonicalName.equals("Catalina:host=localhost,type=Cluster")) {
-
- System.out.println("Cluster MBeans Details:");
- System.out.println("=========================================");
-
- String canonicalKeyPropList = objectName.getCanonicalKeyPropertyListString();
- }
- }
-
- ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime");
- System.out.println("廠商:" + (String) mbsc.getAttribute(runtimeObjName, "VmVendor"));
- System.out.println("程序:" + (String) mbsc.getAttribute(runtimeObjName, "VmName"));
- System.out.println("版本:" + (String) mbsc.getAttribute(runtimeObjName, "VmVersion"));
- Date starttime = new Date((Long) mbsc.getAttribute(runtimeObjName, "StartTime"));
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- System.out.println("啟動時間:" + df.format(starttime));
-
- Long timespan = (Long) mbsc.getAttribute(runtimeObjName, "Uptime");
- System.out.println("連續工作時間:" + test.formatTimeSpan(timespan));
-
-
- ObjectName heapObjName = new ObjectName("java.lang:type=Memory");
- MemoryUsage heapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
- "HeapMemoryUsage"));
- long maxMemory = heapMemoryUsage.getMax();
- long commitMemory = heapMemoryUsage.getCommitted();
- long usedMemory = heapMemoryUsage.getUsed();
- System.out.println("heap:" + (double) usedMemory * 100 / commitMemory + "%");
-
- MemoryUsage nonheapMemoryUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(heapObjName,
- "NonHeapMemoryUsage"));
- long noncommitMemory = nonheapMemoryUsage.getCommitted();
- long nonusedMemory = heapMemoryUsage.getUsed();
- System.out.println("nonheap:" + (double) nonusedMemory * 100 / noncommitMemory + "%");
-
- ObjectName permObjName = new ObjectName("java.lang:type=MemoryPool,name=Perm Gen");
- MemoryUsage permGenUsage = MemoryUsage.from((CompositeDataSupport) mbsc.getAttribute(permObjName, "Usage"));
- long committed = permGenUsage.getCommitted();
- long used = heapMemoryUsage.getUsed();
- System.out.println("perm gen:" + (double) used * 100 / committed + "%");
-
-
- ObjectName managerObjName = new ObjectName("Catalina:type=Manager,*");
- Set<ObjectName> s = mbsc.queryNames(managerObjName, null);
- for (ObjectName obj : s) {
- System.out.println("應用名:" + obj.getKeyProperty("path"));
- ObjectName objname = new ObjectName(obj.getCanonicalName());
- System.out.println("最大會話數:" + mbsc.getAttribute(objname, "maxActiveSessions"));
- System.out.println("會話數:" + mbsc.getAttribute(objname, "activeSessions"));
- System.out.println("活動會話數:" + mbsc.getAttribute(objname, "sessionCounter"));
- }
-
-
- ObjectName threadpoolObjName = new ObjectName("Catalina:type=ThreadPool,*");
- Set<ObjectName> s2 = mbsc.queryNames(threadpoolObjName, null);
- for (ObjectName obj : s2) {
- System.out.println("端口名:" + obj.getKeyProperty("name"));
- ObjectName objname = new ObjectName(obj.getCanonicalName());
- System.out.println("最大線程數:" + mbsc.getAttribute(objname, "maxThreads"));
- System.out.println("當前線程數:" + mbsc.getAttribute(objname, "currentThreadCount"));
- System.out.println("繁忙線程數:" + mbsc.getAttribute(objname, "currentThreadsBusy"));
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public static String formatTimeSpan(long span) {
- long minseconds = span % 1000;
-
- span = span / 1000;
- long seconds = span % 60;
-
- span = span / 60;
- long mins = span % 60;
-
- span = span / 60;
- long hours = span % 24;
-
- span = span / 24;
- long days = span;
- return (new Formatter()).format("%1$d天 %2$02d:%3$02d:%4$02d.%5$03d", days, hours, mins, seconds, minseconds)
- .toString();
- }
-
- }
- import java.util.Iterator;
- import java.util.Set;
- import javax.management.Attribute;
- import javax.management.MBeanInfo;
- import javax.management.MBeanServerConnection;
- import javax.management.MBeanServerInvocationHandler;
- import javax.management.ObjectInstance;
- import javax.management.ObjectName;
- import javax.management.remote.JMXConnector;
- import javax.management.remote.JMXConnectorFactory;
- import javax.management.remote.JMXServiceURL;
- public class Client {
- public static void main(String[] args) throws Exception {
- JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
- JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
- MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
- ObjectName mbeanName = new ObjectName("chengang:name=HelloWorld");
-
- System.out.println("Domains:---------------");
- String domains[] = mbsc.getDomains();
- for (int i = 0; i < domains.length; i++) {
- System.out.println("\tDomain[" + i + "] = " + domains[i]);
- }
-
- System.out.println("MBean count = " + mbsc.getMBeanCount());
-
- mbsc.setAttribute(mbeanName, new Attribute("Name", "PANDA"));
- System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));
-
- HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);
- proxy.printHello();
- proxy.printHello("Raymend");
-
- mbsc.invoke(mbeanName, "printHello", null, null);
- mbsc.invoke(mbeanName, "printHello", new Object[] { "熊貓燒香" }, new String[] { String.class.getName() });
-
- MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
- System.out.println("Hello Class: " + info.getClassName());
- System.out.println("Hello Attriber:" + info.getAttributes()[0].getName());
- System.out.println("Hello Operation:" + info.getOperations()[0].getName());
-
- System.out.println("all ObjectName:---------------");
- Set set = mbsc.queryMBeans(null, null);
- for (Iterator it = set.iterator(); it.hasNext();) {
- ObjectInstance oi = (ObjectInstance) it.next();
- System.out.println("\t" + oi.getObjectName());
- }
-
- jmxc.close();
- }
- }
由于現在項目中用到了LinkedHashMap,并不是太熟悉就到網上搜了一下。
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));
}
}
}
|
運行結果如下:
*************************LinkedHashMap*************
6=apple
3=banana
2=pear
*************************HashMap**************************
2=pear
6=apple
3=banana
分析:LinkedHashmap 的特點是put進去的對象位置未發生變化,而HashMap會發生變化.
再普及下:
java為數據結構中的映射定義了一個接口java.util.Map;它有四個實現類,分別是HashMap
Hashtable LinkedHashMap 和TreeMap.
Map主要用于存儲健值對,根據鍵得到值,因此不允許鍵重復(重復了覆蓋了),但允許值重復。
Hashmap
是一個最常用的Map,它根據鍵的HashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得數據的順序是完全隨機的。
HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為
Null;HashMap不支持線程的同步,即任一時刻可以有多個線程同時寫HashMap;可能會導致數據的不一致。如果需要同步,可以用
Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。
Hashtable與
HashMap類似,它繼承自Dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了
Hashtable在寫入時會比較慢。
LinkedHashMap
是HashMap的一個子類,保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的.也可以在構造時用帶參數,按照應用次數排序。在遍歷的時候會比HashMap慢,不過有種情況例外,當HashMap容量很大,實際數據較少時,遍歷起來可能會比
LinkedHashMap慢,因為LinkedHashMap的遍歷速度只和實際數據有關,和容量無關,而HashMap的遍歷速度和他的容量有關。
TreeMap實現SortMap接口,能夠把它保存的記錄根據鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器,當用Iterator
遍歷TreeMap時,得到的記錄是排過序的。
一般情況下,我們用的最多的是HashMap,在Map 中插入、刪除和定位元素,HashMap
是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。如果需要輸出的順序和輸入的相同,那么用LinkedHashMap
可以實現,它還可以按讀取順序來排列.
HashMap是一個最常用的Map,它根據鍵的hashCode值存儲數據,根據鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為NULL,允許多條記錄的值為NULL。
HashMap不支持線程同步,即任一時刻可以有多個線程同時寫HashMap,可能會導致數據的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable與HashMap類似,不同的是:它不允許記錄的鍵或者值為空;它支持線程的同步,即任一時刻只有一個線程能寫Hashtable,因此也導致了Hashtable在寫入時會比較慢。
LinkedHashMap保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時,先得到的記錄肯定是先插入的。
在遍歷的時候會比HashMap慢TreeMap能夠把它保存的記錄根據鍵排序,默認是按升序排序,也可以指定排序的比較器。當用Iterator遍歷TreeMap時,得到的記錄是排過序的。