ThreadLocal类简介说明
下文笔者讲述ThreadLocal示例简介说明,如下所示
ThreadLocal简介
ThreadLocal是 ThreadLocal是Java 中一个类
用于在多线程环境下实现线程本地变量
它提供一种机制
使得每个线程都可以拥有自己的变量副本
从而避免了线程间共享变量的竞争和同步问题。
ThreadLocal功能:
将变量与当前线程关联起来
使得每个线程都可以访问到自己的变量副本
而不会影响其他线程
通过使用ThreadLocal,可以在多个线程中安全地访问和修改线程本地变量,而无需使用显式的同步机制。
ThreadLocal示例
package com.threadlocal;
/*
*ThreadLocal类
*/
public class ThreadLocalDemo {
public static void main(String[] args) {
new Thread(new Runnable(){
@Override
public void run() {
Message msg=new Message();
msg.setNote("com.java265");
MyUtil.set(msg);
MessageConsumer ms=new MessageConsumer();
ms.print();
}
},"用户A").start();
new Thread(new Runnable(){
@Override
public void run() {
Message msg=new Message();
MyUtil.set(msg);
msg.setNote("好好学习");
MessageConsumer ms=new MessageConsumer();
ms.print();
}
},"用户B").start();
}
}
/*
* 为了是两个线程访问msg.getNote()的时候,都有自己的数据,互补影响
* 采用ThreadLocal为其创建各自的局部变量:set(msg)
*/
class MyUtil{
//private static Message msg;//多线程访问修改了一个,数据是共享的,数据都变了
private static ThreadLocal threadLocal=new ThreadLocal();//当每一个线程访问某变量时,让其都有自己的局部变量
/*
* ThreadLocal:
* 该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,
* 因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。
* ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。
*
*/
public static void set(Message msg){
threadLocal.set(msg);
}
public static Message get(){
return (Message) threadLocal.get();
}
}
class Message{
private String note;
public Message(){}
public void setNote(String note){
this.note=note;
}
public String getNote(){
return note;
}
}
class MessageConsumer{
/*public void print(Message msg){
System.out.println(Thread.currentThread().getName()+"="+msg.getNote());
}*/
public void print(){
System.out.println(Thread.currentThread().getName()+"="+MyUtil.get().getNote());
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


