ThreadLocal(三)

2014-11-24 03:19:40 · 作者: · 浏览: 1
cal {

public javax.sql.DataSource ds;

public JDBCContextThreadLocal(javax.sql.DataSource ds)

{

this.ds=ds;

}

protected synchronized Object initialValue() {

return new JDBCContext(ds);

}

}

}

使用单例模式,不同的线程调用getJdbcContext()获得自己的jdbcContext,

都是通过JDBCContextThreadLocal内置子类来获得JDBCContext对象的线程局部变量

总结

ThreadLocal和同步机制,两者面向的问题领域不同。

同步机制是为了同步多个线程对相同资源的并发访问,是为了多个线程之间进行通信的有效方式; 而ThreadLocal是隔离多个线程的数据共享,从根本上就不在多个线程之间共享资源(变量),这样当然不需要对多个线程进行同步了。

所以,如果你需要进行多个线程之间进行通信,则使用同步机制;如果需要隔离多个线程之间的共享冲突,可以使用ThreadLocal,这将极大地简化你的程序,使程序更加易读、简洁。

如果我们想把ThreadLocal所绑定的对象的引用清空,请不要粗暴的把ThreadLocal引用设置null,而应该调用remove()方法。否则会造成内存泄露。关于此的更多内容请参考《ThreadLocal的内存泄露》