一.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;
}