Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.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 getName()对Thread.currentThread().getName()。请解释一下这两者的区别_Java_Multithreading_Synchronized - Fatal编程技术网

Java getName()对Thread.currentThread().getName()。请解释一下这两者的区别

Java getName()对Thread.currentThread().getName()。请解释一下这两者的区别,java,multithreading,synchronized,Java,Multithreading,Synchronized,但如果我仅用getName替换Thread.currentThread.getName,则输出为: t1 t1 t1 t1 t1 t3 t3 t3 t3 t3 t2 t2 t2 t2 t2 请解释发生这种情况的原因。因为Thread.currentThread.getName会为您获取当前正在运行的线程的名称,但getName会解析为st.getName,并且st始终是您的第一个线程实例 为什么getName解析为st.getName?因为: 在构造第二个到第四个线程的过程中,将第一个线程作为

但如果我仅用getName替换Thread.currentThread.getName,则输出为:

t1 t1 t1 t1 t1 t3 t3 t3 t3 t3 t2 t2 t2 t2 t2
请解释发生这种情况的原因。

因为Thread.currentThread.getName会为您获取当前正在运行的线程的名称,但getName会解析为st.getName,并且st始终是您的第一个线程实例

为什么getName解析为st.getName?因为:

在构造第二个到第四个线程的过程中,将第一个线程作为参数传入,并将其保存在实例成员st中

线程的run方法调用st.show,因此它们总是在第一个线程上调用show。如果你启动了第一个线程,你会得到一个NPE,因为第一个线程的st成员从来没有被赋予非空值

因此,在show中,这是第一个线程。非限定实例方法调用将其用作实例,这是第一个线程

因为Thread.currentThread.getName获取当前运行线程的名称,但getName解析为st.getName,并且st始终是第一个线程实例

为什么getName解析为st.getName?因为:

在构造第二个到第四个线程的过程中,将第一个线程作为参数传入,并将其保存在实例成员st中

线程的run方法调用st.show,因此它们总是在第一个线程上调用show。如果你启动了第一个线程,你会得到一个NPE,因为第一个线程的st成员从来没有被赋予非空值

因此,在show中,这是第一个线程。非限定实例方法调用将其用作实例,这是第一个线程


因为你在乱搞线程,混淆了线程和任务的可运行性。因为你在乱搞线程,混淆了线程和任务的可运行性。
t1 t1 t1 t1 t1 t3 t3 t3 t3 t3 t2 t2 t2 t2 t2
t0 t0 t0 t0 t0 t0 t0 t0 t0 t0 t0 t0 t0 t0 t0