0
点赞
收藏
分享

微信扫一扫

Java多线程--ThreadLocal--使用/教程/实例

左小米z 2022-02-15 阅读 102


简介

        本文用示例来介绍Java中ThreadLocal的用法。

方法

方法

作用

说明

void set(T value)

设置值

设置线程中本地变量xxx的值

T get()

获取值

获取线程中本地变量xxx的值

void remove()

删除


用完ThreadLocal后要调用此方法,不然可能导致内存泄露。


实例

单个变量

package com.example.a;

public class Demo {
static ThreadLocal<String> threadLocal = new ThreadLocal<>();

static void print(String str){
System.out.println(str + ":" + threadLocal.get());
}

public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
threadLocal.set("abc");
print("thread1 variable");
}
});

Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
threadLocal.set("def");
print("thread2 variable");
}
});

thread1.start();
thread2.start();
}
}

运行结果

thread1 variable:abc
thread2 variable:def

多个变量

package com.example.a;

public class Demo {
static ThreadLocal<String> threadLocal = new ThreadLocal<>();
static ThreadLocal<String> threadLocal2 = new ThreadLocal<>();

static void print(String str){
System.out.println(str + ":" + threadLocal.get());
System.out.println(str + ":" + threadLocal2.get());
}

public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
threadLocal.set("abc");
threadLocal2.set("abc2");
print("thread1 variable");
}
});

Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
threadLocal.set("def");
threadLocal2.set("def2");
print("thread2 variable");
}
});

thread1.start();
thread2.start();
}
}

运行结果

thread1 variable:abc
thread1 variable:abc2
thread2 variable:def
thread2 variable:def2

 实际场景

数据库连接

public Connection initialValue() {
return DriverManager.getConnection(DB_URL);
}

public static Connection getConnection() {
return connectionHolder.get();
}

Session管理

public static Session getSession() throws InfrastructureException {  
Session s = (Session) threadSession.get();
try {
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
} catch (HibernateException ex) {
throw new InfrastructureException(ex);
}
return s;
}

其他网址

​​(基础系列)ThreadLocal的用法、原理和用途 - SegmentFault 思否​​

​​ThreadLocal作用、场景、原理 - 简书​​


举报

相关推荐

0 条评论