一、概念
-
进程
进程:在操作系统中 运行的程序。
多进程 并发(一起)执行:宏观串行,微观并发
-
线程
线程:是进程中 执行的多个任务,每个任务称1个线程。 如,迅雷下载。
多线程并发执行:宏观串行,微观并发
-
主线程
现有的程序,从main函数入口执行,是单线程,称主线程。
-
线程的组成
内存: 堆空间(对象) 共享、栈空间(局部变量) 独立
数据
功能
CPU
二、创建线程【重点】
有四种方式:
//1.继承父类 Thread
1> 定义线程类,并覆盖run方法:
public void run(){
// 线程任务(功能代码)
}
2> 创建线程对象
主函数中
MyThread t1 = new MyThread();
3> 启动线程
线程对象名.start();// 启动线程,JVM自动调run实现功能
//2.实现接口 Runnable
1> 定义线程目标类,实现Runnable接口,实现run方法:
public void run(){
// 线程任务(功能代码)
}
2> 创建目标对象
MyTarget target = new MyTarget();
3> 创建线程对象
Thread t1 = new Thread(target);
4> 启动线程
t1.start();
//实现Callable接口
与使用Runnable相比,Callable功能更强大:
相比于run()方法,call()方法可以有返回值
call()方法可以抛出异常,被外面的操作捕获,获取异常的信息
Callable支持泛型的返回值
需要借助FutureTask类,比如获取返回结果
Future接口:
可以对具体Runnable、Callable任务的执行结果进行取消、查询是否完成、获取结果等。
FutureTask是Future接口的唯一的实现类。
FutureTask同时实现了Runnable、Future接口,它既可以作为Runnable被线程执行,也可以作为Future得到Callable的返回值。
//第四种可以通过线程池创建



