易截截图软件、单文件、免安装、纯绿色、仅160KB

Java的ThreadLocal类的使用~~~~~~~~~~~~~~~~~

转载自:http://chenpingtai2008.javaeye.com/blog/253339
早在Java
1.2推出之时,Java平台中就引入了一个新的支持:java.lang.ThreadLocal,给我们在编写多线程程序时提供了一种新的选择。使用
这个工具类可以很简洁地编写出优美的多线程程序,虽然ThreadLocal非常有用,但是似乎现在了解它、使用它的朋友还不多。
   ThreadLocal是什么
   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread
local
variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,
就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每
一个线程都完全拥有该变量。线程局部变量并不是Java的新发明,在其它的一些语言编译器实现(如IBM XL
FORTRAN)中,它在语言的层次提供了直接的支持。因为Java中没有提供在语言层次的直接支持,而是提供了一个ThreadLocal的类来提供支
持,所以,在Java中编写线程局部变量的代码相对比较笨拙,这也许是线程局部变量没有在Java中得到很好的普及的一个原因吧。
   ThreadLocal的设计
   首先看看ThreadLocal的接口:
    Object get() ; // 返回当前线程的线程局部变量副本 protected Object
initialValue(); // 返回该线程局部变量的当前线程的初始值
    void set(Object value); // 设置当前线程的线程局部变量副本的值
  
ThreadLocal有3个方法,其中值得注意的是initialValue(),该方法是一个protected的方法,显然是为了子类重写而特意实
现的。该方法返回当前线程在该线程局部变量的初始值,这个方法是一个延迟调用方法,在一个线程第1次调用get()或者set(Object)时才执行,
并且仅执行1次。ThreadLocal中的确实实现直接返回一个null:
  protected Object initialValue() { return null; }
  ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,用于
存储每一个线程的变量的副本。比如下面的示例实现:
  public class ThreadLocal
  {
   private Map values = Collections.synchronizedMap(new HashMap());
   public Object get()
   {
   Thread curThread = Thread.currentTh


相关文档:

Java语言中的关键字讲解(三)volatile的用途

关于volatile
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。
这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下
volatile关键字的使用变得非常重 ......

截取字符串(中英混合串) JAVA代码

public class SplitString {
    /**
     * @param args
     */
   
    public static void main(String[] args) {
        String str = "中Zell中国5000年,Congruations!";
& ......

【奋斗第二天】菜鸟学Java之我的面向对象观续

昨天写了用面向对象的思想去分析一个实际的问题,呵呵,那么今天就就类和对象做一个详细的讨论。
昨天说了在CS中人物可能是一个抽象类或一个接口,而各种各样的人物就是继承或实现了这个接口,而说到这里我们还在讨论类,还没有涉及到对象,那么什么时候产生的对象呢?那是咱登陆了CS后选择了一个人物,然后再我们选好的同 ......

掌握JAVA的标准

http://www.java-cn.com/technology/tech/4759.html
 
    偶尔在网上发现的一片关于掌握JAVA的标准,感觉有点意思,虽然在一些观点上有些偏颇,但作为学习JAVA的引导尚可。至于原创是谁没有必要考证。
时常看到一些人说掌握了Java,但是让他们用Java做一个实际的项目可能又困难重重,在这里, ......

Java序列化与反序列化

java 中的序列化与反序列化代码:
//进行序列化
 public byte[] getByteArray(String[] str)
   {
     byte[] bt = (byte[])null;
     try {
       if (str != null) {
       & ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号