1.1 进程和线程
进程process:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含1-n个线程。可以把进程简单理解为操作系统中运行的一个程序。
线程thread:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。
多进程是指操作系统能同时运行多个任务(程序)。
多线程是指在同一个程序中多个顺序流在执行,进程是线程的容器,一个进程里可以运行1-N个线程,操作系统以进程为单位分配资源。
线程是进程的一个执行分支。
1.2 实现线程的方式
创建线程就是创建Thread类(子类)的对象(实例)
java.lang.Thread
- public class Thread extends Object implements Runnable
构造方法摘要
Constructor and Description |
---|
Thread() : 分配一个新的 Thread对象。 |
Thread(Runnable target) : 分配一个新的 Thread对象。 |
创建一个新的执行线程有两种方法 :
1.2.1 继承Thread类
- 一个是将一个类声明为Thread的子类。 这个子类应该重写run类的方法Thread 。 然后可以分配并启动子类的实例。 例如,
1 | class ThreadTest extends Thread { |
注意:主函数使用start方法启动新线程,而不是调用run方法
1.2.2 实现Runnable接口(优先使用)
- 另一种方法来创建一个线程是声明实现类Runnable接口。 那个类然后实现了run方法。 然后可以分配类的实例,在创建 Thread 时作为参数传递,并启动。
1 | class ThreadTest implements Runnable{ |
这两种方式的区别:
1、继承Thread类:编写简单,可直接操作线程。适用于单继承
2、实现Runnable接口:避免单继承局限性,便于共享资源。
推荐使用实现Runnable接口方式创建线程
思考:为什么不直接调用run()方法?
不管调用什么方法,如何调用,都是只有主线程一条执行路径。