【第08个代码模型】ThreadLocal类
一、学前引入
以后的项目里面ThreadLocal可以帮助减少一些重要的引用传递。
在讲解具体的概念之前首先来观察如下一段程序:
Class Message{
Private string note;
Public void setNote(string note){
This. note =note;
}
public String getNote(){
return note;
}
}
class MessageConsumer{
public void print(message msg) { //必须明确接收Message类对象
Sestem.out.print1n(Thread.currentThread()getName()+“=”+MyUti1.message.getNote(
}
}
Class MyUti1 {
Public static Message message ;
}
Public class TestDemo{
public static void main(string[] args) throws Exception {
new Thread(()->{
Message msg = new Message() ;
Msg.setNote(“www.mldn.cn”);
MyUti1.Message =msg;
New MessageConsumer().print();
},“用户A”).start();
new Thread(()->{
Message msg = new Message() ;
Msg.setNote(“明天可以睡懒觉了!”);
New MessageConsumer().print();
},“用户B”).start();
}
}
以上的代码之中明确的使用了引用传递将Message类的对象传递给了MessageConsumer类的print()方法。
二、ThreadLocal产生意义
如果要想明确的标记出每一个线程的具体的对象信息,就需要使用ThreadLocal,这里面实际上在进行数据保存的时候多保存了一个currentTthread。
本类定义如下:
Public class ThreadLocalextent Object
而后在这个类里面有以下几个重要方法:
○取得数据:public T get();
○保存数据:public void set(T value);
○删除数据:public void remove();
范例:利用ThreadLocal来解决当前问题
Class MyUti1 {
private static ThreadLocal threadlocal;
public static void set(message msg){
threadLocal.set(msg);
}
Public static Message get(){
Return threadLocal.get();
}
一个项目中最重要的对象就是资源的连接信息,例如:数据库。
以后的开发ThreadLocal会作为初期项目的实现基础。