Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程两个线程实例是同一个线程对象_Java_Multithreading - Fatal编程技术网

Java多线程两个线程实例是同一个线程对象

Java多线程两个线程实例是同一个线程对象,java,multithreading,Java,Multithreading,我对代码片段感到困惑: 这是否意味着testThread和m_logTestThread是不同的实例,但指向内存中的同一对象,因此它们是同一个线程 如果是,如果(testThread!=null)的目的是什么 这是否意味着testThread和m_logTestThread是不同的实例 但是指向内存中的同一个对象,因此它们是相同的 线 这部分是正确的。实际上testThread和m_logTestThread是两个不同的引用而不是实例。并且两个引用都指向相同的线程对象。因此,仅仅将引用m_log

我对代码片段感到困惑:

这是否意味着testThread和m_logTestThread是不同的实例,但指向内存中的同一对象,因此它们是同一个线程

如果是,如果(testThread!=null)的目的是什么

这是否意味着testThread和m_logTestThread是不同的实例 但是指向内存中的同一个对象,因此它们是相同的 线

这部分是正确的。实际上
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;