一、什么是多线程

  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);