一、什么是多线程
1.什么是线程?
线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。
2.多线程
多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务, 也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。
二、多线程的作用
提高效率
三、多线程的应用场景
软件中的耗时操作,例如拷贝、迁移大文件,加载大量资源文件等想让多个事情同时进行时。
四、并发和并行
并发:在同一时刻,有多个指令在单个CPU上交替执行
并行:在同一时刻,有多个指令在多个CPU上同时执行
五、实现多线程的三个方式
①继承Thread类
自定义一个类,继承Thread类,重写run方法,创建子类的对象,调用start方法启动。
在创建对象后可以使用setName方法设置线程的名字
ThreadDemo t1 = new ThreadDemo();
t1.start();
②实现Runnable接口
定义一个类,实现Runnable接口,重写run方法,创建子类的对象,创建Thread对象,将子类传递给Thread,并开启线程。
相比起第一种方法,多了一步创建Thread对象。
RunnableDemo r1 = new RunnableDemo();
Thread t2 = new Thread(r1);
t2.start();
可以在子类中获取线程对象,然后调用线程方法
③利用Callable接口和Future接口方式实现
前两种方法中run方法没有返回值,如果想获取多线程运行的结果,那只能用这种方法。
1.创建类,实现Callable<返回类型>接口。
2.重写call方法
3.在测试类中创建对象
4.创建Future接口实现类FutureTask对象,管理多线程运行的结果
5.创建Thread对象并启动。
CallableDemo c1 = new CallableDemo();
FutureTask<Integer> ft = new FutureTask<>(c1);
Thread t3 = new Thread(ft);
t3.start();
//获取结果
Integer result = ft.get();
System.out.println(result);
