A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李强 初级黑马   /  2012-4-24 00:08  /  3060 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我们都知道jvm启动的时候是多个线程作业的,回收线程也是在执行,并且不定期回收资源,那么回收线程是最后一个执行完吗,是等资源都回收了再推出jvm吗?

2 个回复

倒序浏览

其实啊,JVM启动时候就启动了多个线程,至少有2个线程可以分析出来。

首先要明确一点,任何线程启动都有自己的任务。

创建线程的目的是为了新开启一条执行路径,来执行指定的代码和其他代码实现同时运行。而运行的指定代码就是这个执行路径的任务。

线程是需要任务的,Thread类用于描述线程。所以Thread类也是对任务的描述。而这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的函数。




线程1:执行mian函数的线程  (该线程的任务代码都定义在main函数中)

jvm创建的主线程的任务都定义在了主函数main中。

【开启线程是为了运行指定代码,所以创建线程必须继承Thread类,并复写run方法。将运行的代码定义在run方法中即可。】

线程2:负责垃圾回收的线程。 ( 该线程的任务代码都在垃圾回收器中呢,在底层呢)

垃圾回收会在不定期的回收。

例子:

class Demo extends Object //继承object类

{

public void finalize(){   //复写finalize方法   ,run方法中定义就是线程要运行的任务代码。

System.out.println(“demo finalized”);

}

}

class  ThreadDemo

{

public static void main(String[] args) {

new Demo();

new Demo();

new Demo();

System.gc();//上面new的对象,不定时回收,所以为了演示效果调用System的gc()函数,运行垃圾回收期

System.out.println(“Hello World!”);

}

}

下面只是输出结果其一,也有可能hello World 在后面,也有可能 dome finalized在前面,也与可能demo finalized只输出一次,因为回收线程可能还没有执行完毕,虚拟机就运行完了,之后会强制回收的。回收线程是一个守护进程,到后面你回学到的,是在后台运行的,当其他线程都执行完的时候,他就自动结束,告诉虚拟机任务完成退出虚拟机了



图解



可以参考我黑马日记这两篇之前总结的:有详细信息。
调用毕老师一句话:哦了
http://www.itcast.info/archives/33
http://www.itcast.info/archives/255




点评

嘿 、咋你日记啥都有呢。你是传智的?  发表于 2012-4-24 02:13
回复 使用道具 举报
本帖最后由 卡斯特隋隋隋 于 2012-4-24 02:29 编辑
卡斯特隋隋隋 发表于 2012-4-24 00:25
其实啊,JVM启动时候就启动了多个线程,至少有2个线程可以分析出来。首先要明确一点,任何线程启动都有自己 ...

我正在传智上课呢,非常荣幸的到了毕老师的班,有时间我就写点日记哈哈,基础班快学完了,掌握的不是很牢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马