一、进程
1、进程:
系统进行资源调度和分配的一个单位。当程序进入内存运行时,即为进程。
2、进程的三大特点:
(1)独立性:独立拥有资源,有独立的空间地址;
(2)动态性:有自己的生命周期和状态;
(3)并发性:某一时刻,只有一个命令在CPU执行。但是在某一段时间,多条命令轮换执行,宏观上看就像多个进程同时执行一样;
二、线程:
1、线程:
进程的组成部分,是进程包含的多个顺序执行流。
2、线程的特点:
(1)每个进程可以有多个线程,而一个线程必有一个父进程;
(2)线程可以拥有自己的堆栈、程序计数器、局部变量,但是不能拥有系统资源,它与父进程的其他线程共享父进程的资源;
(3)线程是独立运行的,不知道进程中还有其他线程;
(4)线程的执行是抢占式的;
(5)一个线程可以创建或撤销另一个线程,一个进程中的多个线程可以并发执行;
3、Java中线程的创建:
(1)继承Thread类,重写run方法,调用start方法启动该线程;
(2)实现Runnable接口,重写run方法。将Runnable接口的实现类作为Thread类的target;
(3)使用Callable和Future
- 实现Callable接口,重写call方法,但是有返回值,且可进行异常处理;
- FutureTask包装Callable接口的实现类,封装call方法的返回值;
- FutureTask对象作为Thread类的target;
- FutureTask的get方法获取执行后的返回值;
- (4)对比:
使用接口可以继承其他类。多个线程共享一个target对象,非常适合多线程处理同一份资源。将CPU、代码、数据分开,形成清晰模型
4、Java中开发多线程的包:java.util.concurrent
包中常用多线程类:ThreadLocal、原子类、Lock、容器类