易截截图软件、单文件、免安装、纯绿色、仅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中throw和throws的区别

系统自动抛出的异常
所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常
用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。
throw是语句抛出 ......

Java语言中关键字讲解(二)transient的用途

1.什么是序列化
对象的寿命通常随着生成该对象的程序的终止而终止。有时候,可 能需要 将 对象的状态保存下来,在需要时再将对象恢复。我们把对象的这种能记录自己的状态以便将来再生的能力 。叫作对象的持续性(persistence)。对象通过写出描述自己状态的数值来记录自己 ,这个过程叫对象的序列化(Serialization) 。序列化 ......

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

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

Java中类的生命周期

  Java虚拟机管理类和对象的生命周期;
(1)类的生命周期从类被加载,连接,初始化开始,到类被卸载结束;
(2)类处于生命周期时,它的二进制数据位于运行时方法区内,在堆区还有一个相应的描述类的Class类的对象;
(3)只有当类处于生命周期中时,Java程序才能够使用它。
1.Java虚拟机及程序的生命周期
(1) ......

JAVA排序汇总 java排序算法

 package com.softeem.jbs.lesson4;

import java.util.Random;

/**

* 排序测试类

* 排序算法的分类如下:

* 1.插入排序(直接插入排序、折半插入排序、希尔排序);

* 2.交换排序(冒泡泡排序、快速排序);

* 3.选择排序(直接选择排序、堆排序);

* 4 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号