JDBC: ThreadLocal 类

1、ThreadLocal

ThreadLocal用于保存某个线程共享变量。在Java中,每个线程对象都有一个ThreadLocal<ThreadLocal,Object>,其中key就是一个ThreadLocal,而Object就是线程的共享变量。对于同一个static ThreadLocal,不同的线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。

在Java的多线程编程中,为保证多个线程对共享变量的安全访问,通常会使用synchronized来保证同一时刻只有一个线程对共享变量进行操作。这种情况下可以将类变量放到ThreadLocal类型的对象中,使变量在每个线程中都有独立拷贝,不会出现一个线程读取变量时而被另一个线程修改的现象。最常见的ThreadLocal使用场景为用来解决数据库连接、Session管理等。
复制代码
package com.dgd.test;

import java.util.Random;

public class TestTools {
    public static void main(String[] args) {
        MyThread th1=new MyThread();
        th1.start();

        MyThread th2=new MyThread();
        th2.start();
    }
}

class  Tools{
    private  static Random rand=new Random();
    private  static ThreadLocal<Integer> th=new ThreadLocal<>();

    public  static  void setNumber()
    {
        th.set(rand.nextInt(100));
        //这里设置的就是当前线程保存的共享变量,这个共享变量不是之前的多线程之间的共享变量,而是同一个线程在整个生命周期中,使用的共享变量。
    }
    public  static int getNumber(){
        return th.get();
    }
}
class MyThread extends Thread{
    public  void  run(){
        Tools.setNumber();
        for (int i = 0; i <5 ; i++) {
            int number=Tools.getNumber();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread()+":"+number);
        }
    }
}
复制代码

 

 
posted @   kkzhang  阅读(282)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示