栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ThreadLocal应用实例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ThreadLocal应用实例

1、ThreadLocal工具类

import java.util.Random;

public class ThreadLocalUtils {

    public static final ThreadLocal threadLocal = new ThreadLocal() {
        @Override
        protected Object initialValue() {
            System.out.println("调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法");
//            return new Random().nextInt(100);
            return null;
        }
    };

}
 

2、业务线程类

import lombok.SneakyThrows;

import java.util.Random;
import java.util.concurrent.TimeUnit;

public class Task implements Runnable {

    private String name;

    Task(String name) {
        this.name = name;
    }

    @SneakyThrows
    @Override
    public void run() {
        for (int i = 1; i <= 4; i++) {
            // ThreadLocal.get方法获取本地线程变量
            if (null == ThreadLocalUtils.threadLocal.get()) {
                Random random = new Random();
                ThreadLocalUtils.threadLocal.set(random.nextInt(100));

                int num = (Integer) ThreadLocalUtils.threadLocal.get();
                System.out.println("线程:【" + name + "】当前值: " + num);

                TimeUnit.MILLISECONDS.sleep(1000);

                continue;

            }

            int num = (Integer) ThreadLocalUtils.threadLocal.get();
            num += 1;
            ThreadLocalUtils.threadLocal.set(num);

            System.out.println("线程:【" + name + "】当前值: " + num);
            if (i == 3) {
                ThreadLocalUtils.threadLocal.remove();
            }
            Thread.sleep(1000);

        }
    }

}

3、测试

public class ThreadLocalTest {

    public static void main(String[] args) {

        new Thread(new Task("task-1")).start();
        new Thread(new Task("task-2")).start();

    }

}

4、结果

调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法
调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法
线程:【task-1】当前值: 75
线程:【task-2】当前值: 24
线程:【task-2】当前值: 25
线程:【task-1】当前值: 76
线程:【task-2】当前值: 26
线程:【task-1】当前值: 77
调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法
调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法
线程:【task-1】当前值: 29
线程:【task-2】当前值: 12

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号