Java多线程两个线程实例是同一个线程对象
我对代码片段感到困惑: 这是否意味着testThread和m_logTestThread是不同的实例,但指向内存中的同一对象,因此它们是同一个线程 如果是,如果(testThread!=null)的目的是什么 这是否意味着testThread和m_logTestThread是不同的实例 但是指向内存中的同一个对象,因此它们是相同的 线 这部分是正确的。实际上Java多线程两个线程实例是同一个线程对象,java,multithreading,Java,Multithreading,我对代码片段感到困惑: 这是否意味着testThread和m_logTestThread是不同的实例,但指向内存中的同一对象,因此它们是同一个线程 如果是,如果(testThread!=null)的目的是什么 这是否意味着testThread和m_logTestThread是不同的实例 但是指向内存中的同一个对象,因此它们是相同的 线 这部分是正确的。实际上testThread和m_logTestThread是两个不同的引用而不是实例。并且两个引用都指向相同的线程对象。因此,仅仅将引用m_log
testThread
和m_logTestThread
是两个不同的引用
而不是实例
。并且两个引用都指向相同的线程
对象。因此,仅仅将引用
m_logTestThread
指向null
并不意味着testThread
引用也指向null
您也可以通过一个简单的示例在实践中看到这一点:-
String str = "abc";
String strCopy = str; // strCopy now points to "abc"
str = null; // Nullify the `str` reference
System.out.println(strCopy.length()); // Will print 3, as strCopy still points to "abc"
因此,即使将其中一个引用设置为null,另一个引用仍然指向同一个线程对象。对象只有在有指向它的0引用
或有循环引用
时才有资格进行垃圾收集
请参阅此链接:-了解什么是循环参考
“if(testThread!=null)”的用途是什么
很简单。您可以从该条件推断,它正在检查testThread
引用是否指向null
对象。
执行null检查
,这样就不会在if构造
中得到NPE
,而您正试图中断该引用所指向的线程。因此,如果该引用指向null
,那么您没有任何与该引用关联的线程要中断
这是否意味着testThread和m_logTestThread是不同的实例,但指向内存中的同一对象,因此它们是同一个线程
testThread
和m_logTestThread
是指向Thread
对象的同一实例的两个引用。(说T)
这一行表示testThread
将开始指向m_logTestThread
所指向的同一对象。i、 两者都指向T
m_logTestThread = null;
这一行意味着m_logTestThread
将开始指向null
,即不再指向T。但是,它不会改变testThread
,并且testThread
仍然指向T
m_logTestThread = null;
“if(testThread!=null)”的用途是什么
因为
testThread
可能是也可能不是null
,因此在使用testThread
之前,此条件用于进一步计算,直到对象有0个引用指向它为止。
不考虑循环引用
m_logTestThread = null;