# 一、了解并发和并行的概念

1、并发

在同一个时间(非常短的时间段)上同时执行,单核CPU可以完成

2、并行

在同一个时间上同时执行,要实现并行必须是多核CPU才能完成。

3、怎么实现并发?

通过多线程实现并发

二、线程、进程

1、线程

运行程序中的一个顺序控制流程,也是CPU中的最小调度单位

2、进程

运行中的应用程序

三、线程怎么使用

1、线程的创建方式

①、new Thread

继承Thread类、实现run方法、通过new创建对象、调用start方法

②、new Runnable

实现Runnable接口、实现run方法、通过new创建任务对象、 创建一个Thread对象,用来承载上面任务、调用线程的start方法

③、new Callable

实现Callable接口、实现call方法、通过new创建任务对象、通过一个线程池去承载上面的任务、通过线程池的submit取提交任务

④、线程池

Thread 和 Runnable有本质区别

Thread是一个类,Runnable是一个接口 Thread底层会真正的创建一个线程,而Runnable则只是一个任务,要执行这个任务,必须有一个线程完成。

Runnable和Callable的区别

Callable可以抛异常,Runnable不行 Callable可以有返回值,Runnable没有

2、面试题:线程的创建方式你知道有哪几种?

a、四种,分别是继承Thread、实现Runnable接口、实现Callable接口、线程池创建

b、只有一种,就是继承Thread类,因为其他是那种最终都是通过创建Thread去实现

c、jdk没有创建线程的能力,jdk是通过调用native方法start0通知底层操作系统创建的。

四、线程的生命周期

1、new:初始状态 2、runnable:运行状态 start:就绪状态,只是通知底层操作系统,我已经准备就绪了,你可以给我分配时间片。 running:运行中状态 3、timed_waiting:限期等待 sleep(long)、wait(long)、join(long)、LockSupport.parkUnitl() 4、waiting:无限期等待 wait、join、LockSupport.park 5、blocked:阻塞状态(wait、timed_waiting也是阻塞) 只在遇到Synchronized才会进入 6、terminated:终止状态