![5a301f83f7ab941b0a60dcca6784c7de.png](https://img-blog.csdnimg.cn/img_convert/5a301f83f7ab941b0a60dcca6784c7de.png)
Java 在语言级别提供了支持多线程开发需要的类、接口和相关方法,支持线程的设计是JAVA的重要特征之一。
一、线程说明
跟进程比较,线程的特点:
- 线程本身不能单独运行,它必须在一个程序中运行。
- 线程是程序的内部控制流,一个进程在执行过程中,为了同时完成多个操作,可以创建多个线程,形成多条执行线索。每个线程有自己的堆栈、自己的程序设计器和自己的局部变量。
- 每个进程都有一段专用的内存区域。而同一个进程的各线程间可以共享相同的内存空间(代码空间和数据空间),并且利这些共享内存来实现数据交换、实施通信以及必要的同步工作。
线程是程序中的一个执行流,一个执行流是由CPU运行程序代码并操作程序的数据形成的。JAVA 中的线程模型就是一个CPU、程序代码和数据的封装体。线程在JAVA 中是由 java.lang.Thread 类来定义和描述的,程序中的线程都是 Thread 的实例。
二、线程的创建
JAVA 提供了一下两创建线程的方法:
- 继承类 Thread。定义一个类,作为类 Thread 的子类,在该类上重写方法run()。
- 实现 Runnable 接口。定义一个类,实现接口 Runnable,在该类上重写方法run()。
2.1、继承 Thread 类
方法 run() 是线程在运行时所要执行的动作,但是在执行线程过程中,并不是直接调用该方法,而是在由该类创建实例对象后,通过方法start()来启动线程。
2.2、实现 Runnable 接口
接口 Runnable 只有一个抽象方法 run(),在实现该接口的类中需要重写该方法。在线程运行时,实现了接口 Runnable 的对象需要由类 Thread 封装为线程实例,类 Thread 的构造方法可以接受接口 Runnable 的实例,然后线程实例通过 start() 方法启动线程。
2.3、两种方法比较
两种创建线程的方法有所区别,各有利弊。1、使用继承类 Thread 的方法相