ThreadLocal类

  以后的项目里面,ThreadLocal可以帮助我们减少一些重要的引用传递。

 1 package cn.Tony.demo;
 2 
 3 class Message{
 4     private String note;
 5     public String getNote() {
 6         return note;
 7     }
 8     public void setNote(String note) {
 9         this.note = note;
10     }
11 } 
12 class MessageConsumer{
13     public void print(Message msg) {//必须明确接受Message对象
14         System.out.println(Thread.currentThread().getName()+"="+msg.getNote());
15     }
16 }
17 public class TestDemo{
18     public static void main(String[] args) throws Exception {
19         new Thread(() ->{
20             Message msg=new Message();
21             msg.setNote("www.Tony.com");
22             new MessageConsumer().print(msg);
23         },"用户A").start();
24         new Thread(() ->{
25             Message msg=new Message();
26             msg.setNote("明天过后");
27             new MessageConsumer().print(msg);
28         },"用户B").start();
29     }
30 } 

  以上的代码之中明确的用了引用传递将Message类的对象传递给了MessageConsumer课的print()方法

  所以如果现在想要明确标出每一个线程的具体的对象信息,就需要使用ThreadLocal,实际上整个保存数据的时候多保存了一个currentThread

  public class ThreadLocal<T> extends Object

  而后在这个类里面有一下几个重要方法

    取得数据:public T get();

     保存数据:public void set(T value)  

     删除数据:public void remove()

范例:使用ThreadLocal解决当前问题

 1 package cn.Tony.demo;
 2 
 3 class Message{
 4     private String note;
 5     public String getNote() {
 6         return note;
 7     }
 8     public void setNote(String note) {
 9         this.note = note;
10     } 
11 }   
12 class MessageConsumer{
13     public void print() {//必须明确接受Message对象
14         System.out.println(Thread.currentThread().getName()+"="+MyUtil.get().getNote());
15     }
16 }
17 class MyUtil{
18     private static ThreadLocal<Message> threadLocal=new ThreadLocal<Message>();
19     public static void set(Message msg) {
20         threadLocal.set(msg);
21     }
22     public static Message get() {
23         return threadLocal.get();
24     }
25 }
26 public class TestDemo{
27     public static void main(String[] args) throws Exception {
28         new Thread(() ->{
29             Message msg=new Message();
30             msg.setNote("www.Tony.com");
31             MyUtil.set(msg);
32             new MessageConsumer().print();
33         },"用户A").start();
34         new Thread(() ->{
35             Message msg=new Message();
36             msg.setNote("明天过后");
37             MyUtil.set(msg);
38             new MessageConsumer().print();
39         },"用户B").start();
40     }
41 } 

  一个项目中最重要的对象就是资源的连接信息,例如:数据库

  以后的开发ThreadLocal会作为初期项目的实现基础!

转载于:https://www.cnblogs.com/Tony98/p/10516119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值