什么是进程?
程序是静止的,运行中的程序就是进程。
进程的三个特征:
- 动态性:进程是运行中的程序。要动态的占用内存、CPU和网络等资源。
- 独立性:进程与进程之间是相互独立的,彼此有自己的独立内存区域。
- 并发性:假如CPU是单核。 同一个时刻其实内存中只有一个进程在被执行。
CPU会分时轮询切换依次为每个进程服务。因为切换的速度非常快,给我们的感觉这些进程在同时执行,这就是并发性。
并行:同一个时刻同时有多个在执行。
什么是线程?
- 线程是属于进程的。一个进程可以包含多个线程,这就是多线程。
- 线程是进程中的一个独立执行单元。
- 线程创建开销相对于进程来说比较小。
- 线程也支持并发性。
多线程创建的三种方式:
多线程是很有用的。我们在进程中创建线程的方式有三种:
- 直接定义一个类继承线程类Thread,重写run() 方法,创建线程对象
调用线程对象的start()方法启动线程。 - 定义一个线程任务类实现Runnable接口,重写run()方法, 创建线程任务对象,
把线程任务对象包装成线程对象,调用线程对象的start()方法启动线程。 - 实现Callable按口(拓展)。
线程创建方式一:
a. 继承Thread类的方式
- 定义一个线程类继承Thread类。
- 重写run()方法
- 创建一个新的线程对象。
- 调用线程对象的start()方法启动线程。
public class ThreadDemo {
//将main方法当做一个主线程
public static void main(String[] args) {
//3.创建一个线程对象
Thread t = new MyThread();
//4.线程对象调用start方法启动线程,最终执行run方法
t.start();
for (int i = 0; i <= 5; i++) {
System.out.println("main线程输出i:" + i);
}
}
}
//1.定义一个类继承Thread类
class MyThread extends Thread{
//2.重写run方法
@Override
public void run() {//线程的执行方法
for (int i = 0; i <= 5; i++) {
System.out.println("子线程输出i:" + i);
}
}
}
部分并发执行的结果:
继承Thread类的优缺点:
优点:编码简单。
缺点:线程类已经继承了Thread类无法继承其他类了,功能不能通过继承拓展;
Thead类的常用API:
- public void setName (string name) :给当前线程取名字。
- public void getName () :获取当前线程的名字。
线程存在默认名称,子钱程的默认名称是: Thread-索引。
主线程的默认名称就是: main - public static Thread currentThread()
获取当前线程对象,这个代码在哪个钱程中,就得到哪个线程对象。 - public static void sleep(long time): 让当前线程休眠多少毫秒再继续执行。