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();

 

相关文章
|
26天前
|
存储 Java Spring
ThreadLocal用法
ThreadLocal用法
16 0
|
14天前
|
存储 安全 Java
面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
字节面试题:用过ThreadLocal吗?ThreadLocal是在哪个包下的?看过ThreadLocal源码吗?讲一下ThreadLocal的get和put是怎么实现的?
30 0
|
3月前
|
存储 安全 Java
ThreadLocal原理讲解
ThreadLocal原理讲解
21 0
|
8月前
|
Java
ThreadLocal全面解析
ThreadLocal全面解析
73 0
|
存储 算法 安全
ThreadLocal原理剖析
ThreadLocal原理剖析
161 0
|
Java 定位技术
ThreadLocal原理
经典八股文之ThreadLocal原理
151 0
|
存储 前端开发 Java
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
ThreadLocal学习笔记(一)
|
安全 Java 数据库连接
ThreadLocal类教程
ThreadLocal类教程
109 0
|
存储 安全 Java
ThreadLocal解析
JDK1.2 就这样了 ThreadLocal 为解决多种难题提供了一个新的思路; ThreadLocal的目的是为了解决多线程访问资源时的共享问题。 这原来是搜索到的线程本地的故事都是这样写的。 ,谎言说下去就形成了真理。 但在JDK文档里面
87 0
ThreadLocal解析
|
缓存 安全 Java
如何使用ThreadLocal避免线程安全问题?
这篇文章是关于ThreadLocal的第二篇文章。 在上一篇文章,Yasin给大家介绍了什么是ThreadLocal,以及ThreadLocal的基本原理。 那在实际工作中,ThreadLocal一般用来做什么呢?今天我们以一个简单的应用场景为例,给大家介绍如何用ThreadLocal来帮助我们解决多线程的安全问题。
363 0