ThreadLocal的学习

ThreadLocal

1.原理
在“事务传递Connection参数案例”中,我们必须传递Connection对象,才可以完成整个事务操作。如果不传递参数,是否可以完成?在JDK中给我们提供了一个工具类:ThreadLocal,此类可以在一个线程中共享数据。java.lang.ThreadLocal 该类提供了线程局部 (thread-local) 变量,用于在当前线程中共享数据。
在这里插入图片描述
2.实现

package itheima02;
/*
    java.lang.ThreadLocal<T>类
    作用: 实现线程共享局部变量
    内部使用Map集合,Map集合有2个泛型,K: 键的类型,V代表值的类型
    ThreadLocal<T>类: 只有一个泛型,代表的是值的类型,内部把键的类型已经规定为了Thread,使用当前线程对象,作为键的值
    所以ThreadLocal<T>类,泛型T表示的是给当前线程对象,绑定的值的类型
    成员方法:
        public void set(T t): 给当前线程对象,绑定一个T类型的变量t
        相当于Map集合:
        map.put(Thread.currentThread,t)

        public T get(): 获取当前线程对象上,绑定的值
        相当于Map集合:
        map.get(Thread.currentThread)

        public T remove(): 删除当前线程对象上绑定的值
        相当于Map集合:
        map.remove(Thread.currentThread)
 */
public class Demo02ThreadLocal {
    public static void main(String[] args) {
        //创建ThreadLocal对象
        ThreadLocal<String> tl = new ThreadLocal<>();

        //获取当前线程绑定的值: 以当前main线程作为键,获取绑定的值
        String s = tl.get();
        System.out.println(s);//null

        //给当前main线程,绑定值"hello Threadlocal"
        tl.set("hello Threadlocal");

        s = tl.get();
        System.out.println(s);//hello Threadlocal

        //创建SubThread类的对象
        SubThread st = new SubThread(tl);

        //开启线程
        st.start();

    }
}
package itheima02;

public class SubThread extends Thread {
    private ThreadLocal<String> tl;
    public SubThread(ThreadLocal<String> tl) {
        this.tl = tl;
    }

    @Override
    public void run() {
        //获取当前线程对象上绑定的值
        String str = tl.get();
        System.out.println("run...."+str);//run....null

        tl.set("abc");

        str = tl.get();
        System.out.println("run...."+str);//run...abc.
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值