jdk src 学习 Threadlocal

本文介绍了一个自定义的ThreadLocal实现示例,展示了如何利用ThreadLocal为每个线程提供独立的变量副本,避免线程间的数据竞争,从而实现线程安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 示例:

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 的作用在于,将某些变量绑定到线程中去, 提供一种,线程安全的方式操作某些变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值