ThreadLocal 类|学习笔记

简介: 快速学习 ThreadLocal 类

开发者学堂课程【Java 高级编程ThreadLocal 类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/357


ThreadLocal 类


内容介绍:


1.范例:定义一个消息发送的结构

2. 范例:使用多线程发送消息

3. 在 ThreadLocal 类中的操作方法

 

了解  ThreadLocal 类作用时,编写一个简单的程序做一个先期的分析。

 

范例:定义一个消息发送的结构

package cn.mldn . demo;

class Channel { //消息.的发送通道

private static Message message ;

public static void setMessage(Message m) {

message = m ;

}

public static void send() { //发送消息.

system.out.println("【消息发送】"+ message.getInfo());

}

}

class Message { //要发送的消息体

private String info ;

public void setInfo( String info) {

this.info = info;

}

}

public String getInfo( ) {

return info;

}

}

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

}

}

 

图片63.png

总结:对于当前的程序实际上采用的是一种单线程的模式来进行处理的。

那么如果在多线程的状态下,能否实现完全一致的操作效果。为此将启动三个线程进行处理.

 

范例:使用多线程发送消息

package cn.mldn .demo;

public class JavaAPTDemo {

public static void main(String[] args) throws Exception {

new Thread(()->{

Message msg = new Message() ;

//实例化消息主体对象

msg.setInfo("第一个线程的消息");

//设置要发送的内容

Channe1.setMessage(msg);

//设置要发送的消息

Channe1.send(); //发送消息

},"消息发送者A") .start( ) ;

new Thread(()->{

Message msg = new Message() ;

//实例化消息主体对象

msg.setInfo("第二个线程的消息");

//设置要发送的内容

Channel.setMessage( msg);

//设置要发送的消息

Channel.send(); //发送消息.

},"消息发送者B") .start() ;

new Thread(()->{

Message msg = new Message() ; //实例化消息主体对象

msg.setInfo("第三个线程的消息"); //设置要发送的内容

Channel.setMessage( msg); //设置要发送的消息

Channel.send(); //发送消息.

},"消息.发送者C") .start() ;

}

}

class Channel { //消息.的发送通道

private static Message message ;

public static void setMessage(Message m) {

message = m ;

}

public static void send() { //发送消息.

system.out.println("【" + Thread.currentThread().getName() +"、消息发送】"

+ message.getInfo());

}

}

class Message { //要发送的消息体

private String info ;

public void setInfo( String info) {

this.info = info;

}

}

public String getInfo( ) {

return info;

}

}

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

}

}

运行结果:

【消息发送者 A、消息发送】第二个线程的消息

【消息.发送者 C、消息.发送】第三个线程的消息

【消息发送者 B、消息发送】第二个线程的消息

 

这时消息的处理产生了影响图片64.png

总结:在保持 Channel( 所有发送的通道)核心结构不改变的情况下,需要考虑到每个线程的独立操作问题。

 

那么在这样的情况下,我们发现对于 Channel 类而言除了要保留有发送的消息之外,还应该多存放有一个每线程的标记(当前线程)。

这时我们就可以通过 ThreadLocal 类来存放数据。

在 ThreadLocal 类中,通过有如下的操作方法:

图片65.png

构造方法: public ThreadLocal();

设置数据: public void set(T value);

取出数据:public T get();

删除数据:public void remove();

 

相关文章
|
Java
java springboot 8080端口号冲突时 修改当前项目端口号
java springboot 8080端口号冲突时 修改当前项目端口号
672 0
|
安全 网络安全 数据安全/隐私保护
auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
【8月更文挑战第2天】auth required pam_tally2.so file=/var/log/tallylog onerr=fail deny=3 unlock_time=300 even_deny_root root_unlock_time=300 什么作用?
358 1
|
前端开发 API CDN
Electron实现你自己的Markdown编辑软件
Electron实现你自己的Markdown编辑软件
|
存储 缓存 搜索推荐
深入理解Elasticsearch倒排索引原理与优化策略
总之,Elasticsearch的倒排索引是其高效全文搜索的核心。为了提高性能和可伸缩性,Elasticsearch采用了多种优化策略,包括压缩、分片、合并、位集合和近实时搜索等。这些策略使Elasticsearch成为处理大规模文本数据的强大工具。
1119 0
|
SQL 关系型数据库 MySQL
|
SQL 存储 Linux
【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作
SQLServer 虽然是微软开发的,但是目前已经支持 Windows、Linux、MACOS等。本文详细介绍在 Linux 环境下,如何对 SQL Server 进行安装、升级、回滚、卸载等操作。
920 0
【SQL Server】 Linux 运维下对 SQL Server 进行安装、升级、回滚、卸载操作
|
iOS开发 开发者
为 iOS 应用程序创建配置文件
为 iOS 应用程序创建配置文件
337 0
|
1天前
|
数据采集 人工智能 安全