`

关于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.lang.ThreadLocal类。ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是 threadlocalvariable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。

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

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

    java中ThreadLocal类的使用

    NULL 博文链接:https://justsee.iteye.com/blog/791919

    DBUTILs的ThreadLocal

    DbUTils中用ThreadLocal类

    入研究java.lang.ThreadLocal类.docx

    入研究java.lang.ThreadLocal类.docx

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

    简单分析Java线程编程中ThreadLocal类的使用共4页.pdf.zip

    ThreadLocal简单Demo

    ThreadLocalMap是ThreadLocal类中的内部类,实例却被Thread类持有,相当于每个线程持有一个map

    ThreadLocal

    利用过滤器去获取request和response,进行将其设置到ThreadLocal从而保证我的请求的安装线,这样就能在java普通类中获取request和response

    事务的封装和Threadlocal实例

    JDBC事务的封装和Threadlocal实例,参考博客:http://blog.csdn.net/daijin888888/article/details/50988053

    理解threadlocal

    ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量

    Java ThreadLocal类应用实战案例分析

    主要介绍了Java ThreadLocal类应用,结合具体案例形式分析了java ThreadLocal类的功能、原理、用法及相关操作注意事项,需要的朋友可以参考下

    Java 中ThreadLocal类详解

    什么是ThreadLocal?顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突...

    java事务 - threadlocal

    ThreadLocal保证一个类的实例变量在各个线程中都有一份单独的拷贝, 从而不会影响其他线程中的实例变量

    ThreadLocal的简单理解.doc

    ThreadLocal 是 Java 中的一个类,它提供了一个简单的方式来在每个线程中存储变量,并且能够确保这些变量之间不受影响。下面是对 ThreadLocal 的简单理解。 一、背景 最近有人问我 ThreadLocal 是如何做到在每个...

    理解ThreadLocal

    ThreadLocal 是 Java 中一个非常重要的类,它为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal 并不是一个 Thread,而是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,所以每一个...

    ThreadLocal源码分析和使用

    ThreadLocal 并不是 Java 的新发明,而是一个变相地通过 ThreadLocal 的类提供支持的解决方案。 ThreadLocal 类中的方法包括: * void set(T value):将此线程局部变量的当前线程副本中的值设置为指定值。 * void ...

    快速了解Java中ThreadLocal类

    主要介绍了快速了解Java中ThreadLocal类,介绍了ThreadLocal 是什么,ThreadLocal的作用,ThreadLocal 原理等相关内容,具有一定参考价值,需要的朋友可以了解下。

    实例讲解Java并发编程之ThreadLocal类

    主要介绍了实例讲解Java并发编程之ThreadLocal类,本文给出了模拟ThreadLocal、实用ThreadLocal等代码实例,需要的朋友可以参考下

    Java多线程编程中ThreadLocal类的用法及深入

    ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariable(线程局部变量)才对,真不理解为什么当初 ...

    53.线程间的通信-join方法-ThreadLocal类.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

Global site tag (gtag.js) - Google Analytics