jdk src 学习 Threadlocal

示例:

import java.io.Serializable;

public class TestThreadLocal implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = -1279921928557717157L;

    int age;

    public static void main(String[] argv) throws Exception {

        TestThreadLocal tt = new TestThreadLocal();

        Testthread t1 = new Testthread(tt);
        Testthread t2 = new Testthread(tt);
        Testthread t3 = new Testthread(tt);

        t1.start();
        t2.start();
        t3.start();

    }

     static int ii = 0;
//    static Integer ii = 0;

    // public Integer getIi() {// 这个方式不行
    // ii ++;
    // return ii;
    // }

    public Integer getIi() {
        // tl.set( ii ++ ); // 这个方式也不行, 必须要下面的方式。
        tl.set(tl.get() + 1);
        return tl.get();
    }

    /**
     * { } 内部的初始化是必须的。  否则出现 nullpointexception
     */
    ThreadLocal<Integer> tl = new ThreadLocal<Integer>() {
        protected Integer initialValue() {
            ii = 0;
            return ii;
        };
    };

}

class Testthread extends Thread {

    TestThreadLocal ttl;

    public Testthread(TestThreadLocal ttl) {
        this.ttl = ttl;
    }

    @Override
    public void run() {
        String name2 = Thread.currentThread().getName();
        for (int i = 0; i < 3; i++) {
            System.out.println(" name " + name2 + ttl.getIi());
        }
    }
}
ThreadLocal 的作用在于,将某些变量绑定到线程中去, 提供一种,线程安全的方式操作某些变量。
时间: 2024-08-12 09:06:35

jdk src 学习 Threadlocal的相关文章

多线程学习 ThreadLocal的使用。

ThreadLocal ,即线程变量,是一个以ThreadLocal对象为键,任意对象为值得存储接口.这个接口被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值. 可以通过set(T)方法来设置一个值,在当前线程下,在通过get()方法获取到原先设置的值. 上面的文字是不是有点晦涩?来,学习一下明白的. 变量值得共享可以使用 public static 变量的形式,所有的线程都使用同一个 public static 变量.如果想实现每一个线程都有自己

JDK源代码学习系列04----ArrayList

                                                                         JDK源代码学习系列04----ArrayList 1.ArrayList简单介绍 ArrayList是基于Object[] 数组的,也就是我们常说的动态数组.它能非常方便的实现数组的添加删除等操作. public class ArrayList<E> extends AbstractList<E> implements List<

java多线程学习-ThreadLocal

为了凑字,把oracle文档里介绍ThreadLocal抄过来 public class ThreadLocal<T> extends Object This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its ow

JDK HashMap学习

一. HashMap概述: Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值. 二. HashMap内部存储 使用实现Map接口的内部类存储元素,Map接口定义如下: interface Entry<K,V> { K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); } 内部类如下: static clas

《Java JDK 7 学习笔记》课后练习题1---欢迎纠错

1.()组织负责监督审查Java相关技术规格的演进. A. JCP B. Apache C. EU D. W3C 2.Java技术规格必须以()正式文件提交审查. A. RFC B. JSR C. ISO D. IEEE 3.Java的原始码扩展名和编译完后扩展名正确的是(). A. *.txt.*.java B. *.c.*.class C. *.java.*.class D. *.cpp.*.java 4.对JVM来说,可执行文件的扩展名正确的是(). A. *.java B. *.clas

[Java并发包学习七]解密ThreadLocal

概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资源时的共享问题.如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知! 看看JDK中的源码是怎么写的: This class provides thread-local variables. These variables differ from their norm

ThreadLocal&lt;T&gt;学习总结

public class ThreadLocalTest { /** * @param * @Author: xdj * @Date: 2019/4/12 10:16 * @Description: * @return: void * ThreadLocal是一种变量类型,我们称之为“线程局部变量” * 每个线程访问这种变量的时候都会创建该变量的副本,这个变量副本为线程私有 * ThreadLocal类型的变量一般用private static加以修饰 */ @Test public void

centos 6.9 编译open jdk

学习<深入了解java虚拟机>,按照书上的步骤试着自己编译了个jdk,耗时大半个下午,中间遇到不少问题,在这记录下. 一.环境说明 linux 版本 [[email protected] openjdk_compile]# lsb_release -a LSB Version::base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch Distributor ID:CentOS Description:CentOS releas

Java_解密ThreadLocal

概述 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资源时的共享问题.如果你也这样认为的,那现在给你10秒钟,清空之前对ThreadLocal的错误的认知! 看看JDK中的源码是怎么写的: This class provides thread-local variables. These variables differ from their norm