1. 并行和并发的区别
1. 并行:单位时间内,多个cpu同时处理多个任务
2. 并发:多个任务在一个cpu核上按细分的时间片轮流执行
2. 什么是线程和进程
1. 进程:在内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程可以有多个线程
2. 线程:进程中的一个执行任务,负责当前进程中程序的执行,一个进程至少有一个线程,一个进程一个运行多个线程,多个线程可以共享数据
3. 线程和进程的区别
1. 根本区别:进程是操作系统资源分配的基本单位,线程是处理器任务调度和执行的基本单位
2. 资源开销和内存分配:每个进程都有独立的内存空间,进程之间的切换会有较大的开销,线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间的切换开销小
3. 包含关系:线程是进程的一部分,一个进程至少有一个线程,一个进程可以有多个线程
4. 影响关系:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃后整个进程都会死掉,所以多进程要比多线程健壮
5. 执行过程:每个独立的进程都有程序入口,顺序执行序列,程序出口。线程不能独立运行,必须依附在进程中,由进程提供多个线程执行控制,两者均可并发执行。
4. 什么是进程(线程)死锁
两个或两个以上的进程(线程)在执行过程中,由于竞争资源或彼此通信而造成的一种阻塞现象
5. 形成死锁的四个必要条件
1. 互斥条件
2. 请求与保持条件
3. 不剥夺条件
4. 循环等待条件
6. 如何避免线程死锁
破坏四个必要条件中的一个,一般破坏不剥夺条件或循环等待条件
7. 创建线程的方式
1. 继承Thread类
2. 实现Runnable接口
3. 实现Callable接口
8. runnable和callable的区别
相同点
1. 都是接口
2. 都可以编写多线程程序
3. 都采用Thread.start()启动线程
不同点
1. runnable接口run方法无返回值,callable接口run方法有返回值,是个泛型
2. runnable接口run方法只能抛出运行时异常,无法捕获处理;callable接口call方法允许抛出异常,可以获取异常信息
9. 什么是线程池
事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取下,线程不用自行创建,使用完毕不用销毁而是放回池中,从而减少创建和销毁对象的开销