欲善编程,多看、多敲、多讨论;动眼、动手、动大脑。
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 结束语
人人都是程序员,感谢您的阅读,欢迎关注。
领取专属 10元无门槛券
私享最新 技术干货