开发者学堂课程【Java 面试疑难点串讲1:面试技巧及语言基础:ThreadLocal 引用传递】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/24/detail/496
ThreadLocal 引用传递
内容介绍
一、ThreadLocal 引用传递
一、ThreadLocal 引用传递
ThreadLocal 的本身作用就是进行操作对象信息保存,但是它与传统的信息保存不同,它不仅仅保存的是一个引用对象,而且还保存有一个当前对象。也就是说进行数据保存的时候 ThreadLocal 更像 Map 集合。
范例:引用的麻烦
class Message {
private string note ;
public string getNote( ) {
{
return note;
}
public void setNote( String note) { ng note) {
this.note = note;
}
@override
public String tostring( ) { {
return this.getNote(); );
}
}
class Demo {
public void print(Message msg) {//
需要明确的传递Messagve msg) {//需要明确的传递Message类对象的内容
system.out.println( msg); lSg);
}
}
public class TestThreadLocalDemo { Demo {
public static void main( String[] args ) i
string[] args ) {
Message temp = new Message() ; lessage() ;
temp.setNote( "www.mldn.cn" ); dn.cn" );
new Demo( ).print(temp) ; //
明确的需要进行一个引用对象传递p);
//
明确的需要进行一个引用对象传递过程
现在既然 Demo 类中的 print) 方法核心的目的是接收 Message 类的对象,那么在这样的情况下不希望进行引用传递;
那么一旦不希望进行引用传递的话,这个时候就想到可以利用一个中间的环节类。
范例:避免引用传递
在之前的程序上所有的程序的功能都是在主线程完成的,所以该程序属于一个单线程的程序,如果说要进行多线程的访问开发的话,那么就会发现问题。
范例:观察多线程的操作问题。
这种问题就出现在多个线程中的 Message 类的对象交叉进行 DataCache 类中 msg,对象引用的改变。
范例:通过 ThreadLocal 保存
在进行数据保存的引用传递的时候不再只是一个引用类型,而是包含有一个 currentThread 对象信息保存,这样就可以明确的知道当前操作的对象数据是什么,并且不会与其它线程进行混淆。