黑马程序员技术交流社区

标题: currentThread [打印本页]

作者: bulebone    时间: 2015-6-9 16:01
标题: currentThread
currentThread这个方法是静态,那它就是在对象没创建之前,把类加载入内存时,就已经存在,想问一问这样,它怎么能返回对象呢?
作者: mishisanyi    时间: 2015-6-9 20:20
单核CPU一个时间只能运行一个线程,只要返回那个时刻的,即使时间非常小,也会返回运行中的本类线程对象啊
作者: bulebone    时间: 2015-6-10 00:11
mishisanyi 发表于 2015-6-9 20:20
单核CPU一个时间只能运行一个线程,只要返回那个时刻的,即使时间非常小,也会返回运行中的本类线程对象啊 ...

如果在主函数第一行就用类名调用它呢?
作者: mishisanyi    时间: 2015-6-10 16:45
  1. package exam;

  2. public class Demo{

  3.         public static void main(String[] args){
  4.          System.out.println("ThreadName:"+Thread.currentThread().getName());
  5.         }
  6. }
复制代码

执行结果:ThreadName:main

这下懂了吗


作者: bulebone    时间: 2015-6-10 20:56
本帖最后由 bulebone 于 2015-6-11 09:50 编辑
mishisanyi 发表于 2015-6-10 16:45
执行结果:ThreadName:main

这下懂了吗

执行结果为什么不是jvm?
我这种想法到底错在哪——虚拟机调用主函数,就相当于new Thread().run(),所以在主函数中Thread.currentThread(),应该返回虚拟机(线程对象)!
作者: mishisanyi    时间: 2015-6-11 17:38
bulebone 发表于 2015-6-10 20:56
执行结果为什么不是jvm?
我这种想法到底错在哪——虚拟机调用主函数,就相当于new Thread().run(),所以 ...

线程和进程是两个概念,这个函数是返回线程的,你让他返回进程,这不是可笑吗
作者: bulebone    时间: 2015-6-11 22:55
mishisanyi 发表于 2015-6-11 17:38
线程和进程是两个概念,这个函数是返回线程的,你让他返回进程,这不是可笑吗 ...

线程要执行的代码存放在run(),虚拟机要执行的代码存放在main()。难道不能做这样类比理解:main()相当于run(),虚拟机相当于线程?
看了你的解答,我想问一问,那相当于run()的那个是什么呢?
作者: dailihua    时间: 2015-6-11 23:20
是方法,又不是数据
作者: mishisanyi    时间: 2015-6-12 00:01
bulebone 发表于 2015-6-11 22:55
线程要执行的代码存放在run(),虚拟机要执行的代码存放在main()。难道不能做这样类比理解:main()相当于r ...

让我来给你举个例,中国有多个县城,有一个县城叫进程县,它的中心城叫主线程镇,还有第一线程镇,第二线程镇。我和你现在在城区里,然后我问你:我们在哪个镇,你回答我:我们在进程县。你觉得对吗?如果按照你的说法,返回的进程名,那么所有的线程里都应该返回进程名。
作者: bulebone    时间: 2015-6-12 00:41
mishisanyi 发表于 2015-6-12 00:01
让我来给你举个例,中国有多个县城,有一个县城叫进程县,它的中心城叫主线程镇,还有第一线程镇,第二线 ...

自己推导顺序是这样:main()是存放虚拟机要执行的代码,那是不是可以把main()看做run(),看做类似Thread类里的一个像run()一样的方法,而不应该是线程。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2