常用类库----ThreadLocal类

ThreadLocal
在多线程并发执行中,为了可以准确的实现每个线程中的数据成员访问,可以通过java.lang.ThreadLocal类实现数据的保存与获取
在这里插入图片描述
ThreadLocal类是在多线程并发访问时使用,所以在数据保存时除了保护用户所需要的数据外,还会额外保存一个当前的线程对象,而在获取数据时也将通过当前线程对象来获取保存的数据内容,这样可以保证多线程并发访问下的数据操作安全。
在这里插入图片描述
ThreadLocal最大的特点就是可以同时保存多个线程的数据,由于每个数据都有对应的当前线程对象,这样就可以保证数据传输的正确性。可以简单地把ThreadLocal想象成一个公共储物柜,把每一个操作储物柜的客户想象成一个线程,每个线程都只允许操作自己的储物柜。这样就保证了储存物品的安全。

package com.lxh.fifteenchapter;



public class JavaAPIDemo375 {
       public static void main(String[] args) {
		new Thread(()->{
			Message msg=new Message(); //实例化消息主体对象
			msg.setInfo("线程A消息:AAA");//设置要发送的内容
			Channel.setMessage(msg);//设置要发送的消息
			Channel.send();
		},"消息发送者A").start();
		new Thread(()->{
			Message msg=new Message(); //实例化消息主体对象
			msg.setInfo("线程B消息:BBB");//设置要发送的内容
			Channel.setMessage(msg);//设置要发送的消息
			Channel.send();
		},"消息发送者B").start();
		new Thread(()->{
			Message msg=new Message(); //实例化消息主体对象
			msg.setInfo("线程C消息:CCC");//设置要发送的内容
			Channel.setMessage(msg);//设置要发送的消息
			Channel.send();
		},"消息发送者C").start();
	}
}

class Channel{          //消息发送通道
	private static final ThreadLocal<Message> THREADLOCAL=new ThreadLocal<Message>();
	private Channel() {}
		public static void setMessage(Message m) {
			THREADLOCAL.set(m);
		}
		public static void send() {
			System.out.print("【‘"+Thread.currentThread().getName()+"、消息发送】"+THREADLOCAL.get().getInfo());
		}
	
	
}

class Message{    //消息体
	private String info;

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}
	
}

执行结果

【‘消息发送者B、消息发送】线程B消息:BBB【‘消息发送者C、消息发送】线程C消息:CCC【‘消息发送者A、消息发送】线程A消息:AAA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值