`

关于ThreadLocal类

阅读更多
   该类提供勒线程局部变量。这些变量不同与它们的普通对应物,因为访问一个变量(通过其get 或 set方法)的每个线程都是有自己的局部变量,它独立与变量的初始化副本。ThreadLocal实例通常是类中的私有静态字段,他们希望将状态与某一个线程(例如,用户ID或事务ID)相关联。

   以上为书中内容,有点难懂。我理解为,案例一中定义的一个普通变量被所有线程所共享。而案例二中以ThreadLocal定义的变量则只存在与每一个单独线程

例 1.

package com.mz.xx.tb;

public class SerialNum1 {
    private static int serialNum = 0;
    
    public static int get(){
        return serialNum++;
    }
    
    public static void main(String[] args) {
        new Thread(new MyThread1()).start();
        new Thread(new MyThread1()).start();
        new Thread(new MyThread1()).start();
    }
}

class MyThread1 implements Runnable{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        long tno = Thread.currentThread().getId();
        System.out.println(tno + ":" +SerialNum1.get());
        System.out.println(tno + ":" +SerialNum1.get());
    }
    
}

  • 控制台
  • 8:0
    8:1
    9:2
    9:3
    10:4
    10:5


例 2.

package com.mz.xx.tb;

public class SerialNum {
    private static ThreadLocal<Integer> serialNum = new ThreadLocal<Integer>();
    
    public static int get(){
        int value = 0;
        if(serialNum.get()!=null){
            value = ((Integer)(serialNum.get())).intValue();
        }
        serialNum.set(++value);
        return value - 1;
    }

    public static void main(String[] args) {
        new Thread(new MyThread()).start();
        new Thread(new MyThread()).start();
        new Thread(new MyThread()).start();
    }
}
    
    class MyThread implements Runnable{

        @Override
        public void run() {
            // TODO Auto-generated method stub
            long tno = Thread.currentThread().getId();
            System.out.println(tno + ":" +SerialNum.get());
            System.out.println(tno + ":" +SerialNum.get());
        }
}


  • 控制台
  • 8:0
    8:1
    9:0
    9:1
    10:0
    10:1
分享到:
评论

相关推荐

    JAVA ThreadLocal类深入

    【JAVA ThreadLocal类深入】 Java中的ThreadLocal类是一种线程绑定机制,用于在多线程环境中为每个线程提供独立的变量副本,避免了线程间的数据共享带来的并发访问问题。ThreadLocal并不是一个线程对象,而是线程...

    java中ThreadLocal类的使用

    Java中的`ThreadLocal`类是一个非常实用的工具,它提供了线程局部变量的功能。线程局部变量意味着每个线程都拥有自己独立的变量副本,互不干扰,这在多线程编程中尤其有用,可以避免数据共享带来的同步问题。下面...

    ThreadLocal应用示例及理解

    以上就是关于ThreadLocal的基本概念、使用方法、生命周期管理和实际应用示例的详细解释。了解并熟练掌握ThreadLocal可以帮助我们编写出更高效、更安全的多线程代码。在Java并发编程中,ThreadLocal是一个不可或缺的...

    简单分析Java线程编程中ThreadLocal类的使用共

    Java线程编程中的ThreadLocal类是一个非常重要的工具,它在多线程环境下提供了一种线程局部变量的机制。ThreadLocal并非是简单的变量,而是一种能够确保每个线程都拥有独立副本的变量容器。理解ThreadLocal的工作...

    ThreadLocal

    ThreadLocal是Java编程语言中的一个类,用于在多线程环境中提供线程局部变量。它是一种特殊类型的变量,每个线程都有自己的副本,互不影响,从而实现线程间数据隔离。ThreadLocal通常被用来解决线程共享数据时可能...

    Java 中ThreadLocal类详解

    Java中的ThreadLocal类是一个强大的工具,它允许程序员创建线程局部变量。这意味着每个线程都有其自己独立的、不可见的变量副本,从而避免了线程间的数据共享问题,简化了多线程环境下的编程复杂性。ThreadLocal并不...

    理解的ThreadLocal类的相关源码(用于博文引用源码下载)

    Java中ThreadLocal工具类(解决多线程程序中并发问题的一种新思路,主要为参数的拷贝问题),感兴趣的话可以查看博文,博文地址:http://blog.csdn.net/otengyue/article/details/38459327

    Java ThreadLocal类应用实战案例分析

    Java ThreadLocal类应用实战案例分析 Java ThreadLocal类是Java语言中的一种线程局部变量机制,允许每个线程都拥有自己的变量副本,从而避免了多线程之间的变量冲突。在本文中,我们将通过实战案例分析Java ...

    ThreadLocal 内存泄露的实例分析1

    `ThreadLocal` 是 Java 中用于在单个线程内存储线程局部变量的类,每个线程都有自己的副本,不会互相干扰。`MyThreadLocal` 是 `ThreadLocal` 的子类,用于存储 `MyCounter` 对象。在 `LeakingServlet` 的 `doGet` ...

    入研究java.lang.ThreadLocal类.docx

    ### 知识点详解:Java.lang.ThreadLocal 类 #### 一、概述 **ThreadLocal** 并非线程的一种特殊实现形式,而是一种为每个线程提供独立副本的机制,通常被称为“线程局部变量”。这种机制使得每个线程都可以独立...

    DBUTILs的ThreadLocal

    DbUTils中用ThreadLocal类

    事务的封装和Threadlocal实例

    在这个例子中,`ConnectionHolder`类提供了一组静态方法来设置、获取和移除线程局部的`Connection`对象。当多个线程并发执行时,每个线程都可以安全地使用自己的`Connection`实例,而不会相互干扰。 总的来说,结合...

    理解threadlocal

    `ThreadLocal`是一个非常有用的类,它在Java 1.2版本中被引入到`java.lang`包中。其主要功能是在多线程环境中为每个线程提供独立的变量副本,从而避免了线程之间的数据竞争和同步问题。`ThreadLocal`并不是线程本身...

    ThreadLocal简单Demo

    **线程局部变量(ThreadLocal)** 在Java编程中,`ThreadLocal`是...以上就是关于`ThreadLocal`及其内部类`ThreadLocalMap`的基础知识,它们在多线程编程中起到关键作用,帮助开发者实现高效、安全的线程局部变量管理。

    ThreadLocal整理.docx

    这个功能是通过 Thread 类中的 threadLocals 属性来实现的,这个属性实际上是一个 Entry 数组,其中的每个 Entry 都是一个弱引用,易于在 GC 时被回收。 ThreadLocal 的工作机制是通过计算Hash值来确定在数组中的...

    设计模式及ThreadLocal资料

    本资料主要聚焦于两种设计模式以及Java中的ThreadLocal特性。 首先,我们来探讨单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。在Java中,通常通过私有构造函数、静态工厂方法或...

    java 简单的ThreadLocal示例

    Java中的ThreadLocal是一个非常重要的工具类,它在多线程编程中扮演着独特角色,尤其在处理线程间数据隔离和共享时。ThreadLocal不是线程本身,而是为每个线程提供一个独立的变量副本,使得每个线程都可以独立地改变...

Global site tag (gtag.js) - Google Analytics