关键字:
volatile,其修饰的变量,线程不会保存私有拷贝,java默认为非Volatile,目的是提高速度。
transient,对实现了java.io.Serializable的对象中的变量加上此关键字表示该变量不是串行化的一部分。
以上参考:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.html
对于限定词及其作用范围:
http://javadinosaur.blog.sohu.com/39228842.html
private 'default' protected public -- 同一类中 同一包中 不同包中子类 不同包中非子类。
ThreadLocal
From:http://www.wangchao.net.cn/bbsdetail_51177.html
ThreadLocal 是Java中一种较为特殊的线程绑定机制。通过ThreadLocal存取的数据,总是与当前线程相关,也就是说,JVM 为每个运行的线程,绑定了私有的本地实例存取空间,从而为多线程环境常出现的并发访问问题提供了一种隔离机制。
Servlet 运行是多线程的,而应用服务器并不会为每个线程都创建一个Servlet实例,也就是说,TestServlet在应用服务器中只有一个实例(在Tomcat中是这样,其他的应用服务器可能有不同的实现),而这个实例会被许多个线程并发调用,doGet 方法也将被不同的线程反复调用,可想而知,每次调用doGet 方法,这个唯一的TestServlet 实例的session 变量都会被重置,线程A 的运行过程中,其他的线程如果也被执行,那么session的引用将发生改变,之后线程A 再调用session,可能此时的session 与其之前所用的session就不再一致,显然,错误也就不期而至。ThreadLocal的出现,使得这个问题迎刃而解。
private ThreadLocal localSession = new ThreadLocal();
public void doGet( HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
localSession.set(getSession());
doSomething();
session.flush();
}
public void doSomething(){
Session session = (Session)localSession.get();
//基于session的存取操作
}
同时hibernate在获得session时也有此用法。
<!--EndFragment-->