进程:是一个正在执行的程序。
每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫做控制单元。
线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
一个进程里面有至少一个线程。
Java VM 启动的时候会有一个进程java.exe
多线程举例:比如下载软件。
该进程中至少一个线程负责java程序的执行。
而且这个线程运行的代码存在于main方法中。
该线程称之为主线程。
扩展:其实更细节说明jvm,局面启动不止一个线程。还有负责垃圾回收机制的线程。
多线程可以使多部分代码同时执行。
自定义线程的两种方式:
1.继承Thread类,复写run()方法。
1.1.定义类继承Thread类。
1.2.复写run()方法。
1.3.调用线程的start()方法。一是:启动线程,二是:调用run()方法。
2.实现Runnable接口,复写run()方法。
2.1.定义类实现Runnable接口。
2.2.覆盖Runnbale接口中的run()方法。
2.3.通过Thread类建立线程对象。
2.4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。
2.5.调用Thread类的start()方法开启线程,并调用Runnable接口子类的run方法。
为什么要覆盖run方法呢?
Thread类用于描述线程。
它就定义了一个功能,用于存储线程要运行的代码。这些代码就存储在run方法里面。
currentThread():获取当前线程对象。
getName():获取线程的名称。
setName():给线程更名。
实现Runnable。必须要new Thread()对象的同时就指定run()方法所属对象。
实现方式和继承方式:
Runnable:避免了单继承的局限性。(最常用)
线程代码存放的位置不一样。
继承Thread:线程代码存放在run()方法中。
实现Runnable:线程代码存放在接口子类的run()方法中。
实现接口Runnable只能try不能抛。
|