首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的

欲善编程,多看、多敲、多讨论;动眼、动手、动大脑。

1 如何设置和获取线程名称

多线程的运行状态是不确定的,在程序开发过程中,想要获取一些使用中的线程进行操作。那么给线程命名就至关重要。给线程命名第一个办法是通过构造方法设置线程的名称,构造方法:public Thread(Runnable target,String name),其中 String name即线程名称;第二种方法setName方法:public final void setName(String name);而获取线程名称的方法是:public final String getName()。接下来我们通过不同的方法来设置并获取线程的名称。

注意,如果是运行中线程的线程要获取自身名称,方法是在run中使用:Thread.currentThread().getName();

2 创建一个ThreadNameDemo类

先创建一个ThreadNameDemo类,并在里面创建一个MyThread4内部类,MyThread4实现Runnable接口。在run方法中,我们输出当前线程名称,代码如下图。

3 测试设置和获取线程名称

线程A通过构造方式的形式线程类的构造方式进行赋值,线程B通过setName方式进行赋值,并都成功通过getName的方法获取到了线程的名称。线程启动之后,在线程内部也成功获取到线程名称。代码及运行结果如下图。

4 匿名线程与主线程的名称

在构造方法中,不设置线程名称,然后启动,并获取线程名称。运行结果,获取到的线程名称是Thread-0。查看Thread源码,在其init初始化方法中,可以找到这么一段代码,"Thread-" + nextThreadNum(),也就是系统会给匿名线程一个默认的名字,从0开始自增。

直接调用线程的run方法,在线程运行的时候,获取线程名称返回的并不是Thread-0,而是main,说明myThread3.run()方法确实是运行在主线程。运行测试结果如下图。

5 JVM运行在哪里

现在知道主线程名称是main,java程序运行在JVM中,但是java虚拟机是运行在哪里呢?

每秒钟新建一个线程,并让线程睡60秒。然后把java程序启动两次。启动完之后,我们打开任务管理器,在进行选项卡下,找到Idea进程,然后打开下拉,会发现多了两个Java(TM) Platform SE binary。说明刚才我刚才运行的JVM运行在进程中,并且在性能界面,可以看到线程数一直在增加。

当最后一个线程关闭,也就是120秒之后,java程序运行结束,JVM关闭后,任务管理器中的Java(TM) Platform SE binary进程也消失了。

代码及运行结果如下。

敬请期待关于线程的更多奥秘。

6 结束语

人人都是程序员,感谢您的阅读,欢迎关注。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200302A03VLW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券