其实啊,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://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |