day01-认识ThreadLocal

package com.imut.test;

/**
 * @author djs
 * @create 2022-11-01 11:34
 */
public class MyThreadLocalaTest2 {

    private String content;
    ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }


    public static void main(String[] args) {

        MyThreadLocalaTest2 my = new MyThreadLocalaTest2();

        for (int i = 0; i < 100; i++) {
            Thread t = new Thread(){
                @Override
                public void run() {
                    my.setContent(Thread.currentThread().getName());
                    System.out.println("===============");
                    System.out.println(Thread.currentThread().getName()+"====>"+my.getContent());
                }
            };

            t.setName("线程 ="+i);
            t.start();
        }

    }


    
}

查看控制台输出

===============
===============
线程 =2====>线程 =2
===============
线程 =1====>线程 =2
线程 =0====>线程 =2
===============
线程 =4====>线程 =4
===============
线程 =3====>线程 =4
===============
线程 =5====>线程 =6
===============
线程 =6====>线程 =6
===============
线程 =7====>线程 =7
===============
线程 =8====>线程 =8
===============
线程 =9====>线程 =9
===============
线程 =10====>线程 =10
===============
线程 =11====>线程 =11
===============
线程 =12====>线程 =12
===============
线程 =13====>线程 =13
===============
线程 =14====>线程 =14
===============
线程 =15====>线程 =15
===============
线程 =16====>线程 =16
===============
线程 =17====>线程 =17
===============
线程 =18====>线程 =18
===============
线程 =19====>线程 =19
===============
线程 =20====>线程 =20
===============
线程 =21====>线程 =21
===============
线程 =22====>线程 =22
===============
线程 =23====>线程 =23
===============
线程 =24====>线程 =24
===============
线程 =25====>线程 =25
===============
线程 =26====>线程 =26
===============
线程 =27====>线程 =27
===============
线程 =28====>线程 =28
===============
线程 =29====>线程 =29
===============
线程 =30====>线程 =30
===============
线程 =31====>线程 =31
===============
线程 =32====>线程 =32
===============
线程 =33====>线程 =33
===============
线程 =35====>线程 =35
===============
线程 =36====>线程 =36
===============
线程 =37====>线程 =37
===============
线程 =38====>线程 =38
===============
线程 =39====>线程 =39
===============
线程 =40====>线程 =40
===============
线程 =41====>线程 =41
===============
线程 =42====>线程 =42
===============
线程 =43====>线程 =43
===============
线程 =44====>线程 =44
===============
线程 =45====>线程 =45
===============
线程 =46====>线程 =99
===============
线程 =98====>线程 =98
===============
线程 =97====>线程 =97
===============
线程 =96====>线程 =96
===============
线程 =99====>线程 =96
===============
线程 =34====>线程 =94
===============
线程 =93====>线程 =92
===============
线程 =91====>线程 =89
===============
线程 =88====>线程 =86
===============
线程 =94====>线程 =84
===============
线程 =95====>线程 =83
===============
线程 =82====>线程 =80
===============
线程 =79====>线程 =78
===============
线程 =77====>线程 =77
===============
线程 =76====>线程 =76
===============
线程 =83====>线程 =76
===============
线程 =75====>线程 =75
===============
线程 =84====>线程 =75
===============
线程 =74====>线程 =73
===============
线程 =72====>线程 =72
===============
线程 =86====>线程 =72
===============
线程 =87====>线程 =72
===============
线程 =70====>线程 =70
===============
线程 =89====>线程 =70
===============
线程 =90====>线程 =70
===============
线程 =68====>线程 =68
===============
线程 =92====>线程 =68
===============
线程 =67====>线程 =67
===============
线程 =73====>线程 =67
===============
线程 =66====>线程 =65
===============
线程 =78====>线程 =65
===============
线程 =80====>线程 =64
===============
线程 =64====>线程 =64
===============
线程 =63====>线程 =62
===============
线程 =81====>线程 =62
===============
线程 =61====>线程 =61
===============
线程 =62====>线程 =60
===============
线程 =65====>线程 =58
===============
线程 =58====>线程 =57
===============
线程 =60====>线程 =57
===============
线程 =56====>线程 =55
===============
线程 =57====>线程 =54
===============
线程 =54====>线程 =54
===============
线程 =53====>线程 =52
===============
线程 =55====>线程 =51
===============
线程 =50====>线程 =50
===============
线程 =49====>线程 =49
===============
线程 =51====>线程 =49
===============
线程 =48====>线程 =47
===============
线程 =52====>线程 =71
===============
线程 =71====>线程 =85
===============
线程 =69====>线程 =85
===============
线程 =59====>线程 =85
===============
线程 =47====>线程 =85
===============
线程 =85====>线程 =85

控制台显示有些线程获取的数据不是自己的本身的数据

原因:
创建了100个线程,给每个线程设置数据并获取,各个线程只是获取共享的数据。
线程1使context的值设置为“线程1的数据”,然后线程1还没有执行下一步的打印,
线程2开始运行,设置context的值为“线程2的数据”,并打印“线程2的数据”,
此时,轮到线程1开始执行之前未执行的步骤(打印),然后,线程1开始打印共享的数据context,
此时,context中的数据已由“线程1的数据”变为“线程2的数据”,打印当然是“线程2的数据”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值