其实啊,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
|