java里新建线程设置线程名字_多线程开发不得不掌握,设置和获取线程名称及JVM如何运行的...

原标题:多线程开发不得不掌握,设置和获取线程名称及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();

b08a3f9431fedcc02e180f6f488f7532.png

2 创建一个ThreadNameDemo类

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

eebcd00195cf737596fe3e0da2570feb.png

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

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

bae9042070f9da5eb3fc599c18805ee2.png

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

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

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

460bb5550664957422839311fb01c803.png

5 JVM运行在哪里

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

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

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

代码及运行结果如下。

a4a16800d706f3292a4850a80f755bbb.png

45f917cd333600c55f415308c612c8a6.png

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

6 结束语

人人都是程序员,感谢您的阅读,欢迎关注。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值