一.static修飾某個字段時,確定會改變字段建立的方式(每一個被static修飾的字段對於每個類來講只有一份存儲空間,而非static修飾的字段對於每個對象來講都有一個存儲空間)java
static 修飾符修飾的變量是全部同一個類生成的對象共享的tomcat
二.多線程
Thread 的 run 和 start 方法:函數
ANT 和 Maven 區別:this
struts1 和 struts2的區別:spa
子類構造方法在調用時必須先調用父類的,因爲父類沒有無參構造,必須在子類中顯式調用線程
1)Bootstrap ClassLoader
code
負責加載$JAVA_HOME中jre/lib/rt.jar裏全部的class
,由C++實現,不是ClassLoader子類
對象
2)Extension ClassLoader
blog
負責加載java平臺中擴展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包
3)App ClassLoader
負責記載classpath中指定的jar包及目錄中class
4)Custom ClassLoader
屬於應用程序根據自身須要自定義的ClassLoader,如tomcat、jboss都會根據j2ee規範自行實現ClassLoader
加載過程當中會先檢查類是否被已加載,檢查順序是自底向上,從Custom ClassLoader到BootStrap ClassLoader逐層檢查,只要某個classloader已加載就視爲已加載此類,保證此類只全部ClassLoader加載一次。而加載的順序是自頂向下,也就是由上層來逐層嘗試加載此類。
ArrayList空間的增加率爲1.5倍
一、ThreadLocal的類聲明:
public class ThreadLocal<T>
能夠看出ThreadLocal並無繼承自Thread,也沒有實現Runnable接口。
二、ThreadLocal類爲每個線程都維護了本身獨有的變量拷貝。每一個線程都擁有了本身獨立的一個變量。
因此ThreadLocal重要做用並不在於多線程間的數據共享,而是數據的獨立。
因爲每一個線程在訪問該變量時,讀取和修改的,都是本身獨有的那一份變量拷貝,不會被其餘線程訪問,
變量被完全封閉在每一個訪問的線程中。
三、ThreadLocal中定義了一個哈希表用於爲每一個線程都提供一個變量的副本:
static class ThreadLocalMap {
static class Entry extends WeakReference<ThreadLocal> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal k, Object v) {
super(k);
value = v;
}
}
/**
* The table, resized as necessary.
* table.length MUST always be a power of two.
*/
private Entry[] table;
}