1、并行与并发的区别
并行是同一时刻在计算机中同时执行,并发是一段时间内多个任务在计算机中交替执行
2、线程和进程的区别
进程是一个程序运行中资源分配的基本单位,一个程序至少有一个进程,一个进程至少一个线程,一般都是多个线程
进程在运行过程中,需要独立的存储单元,如果申请不到就会挂起,而多个线程能共享内存资源,这样就能降低运行门槛,从而效率更高
进程是CPU调度的基本单位,在实际开发过程中,一般考虑多线程开发
3、守护线程是什么
是一个服务线程,用来监视和服务其他线程
4、线程创建方式
第一种是继承Thread类
第二种是实现Runnable、callable接口
第三种是通过线程池创建
5、runnable和callable的区别
Runnable接口中run方法的返回值是void在其中可以定义线程的工作任务,但无返回值
callable接口中call方法有返回值,是一个泛型,一般会和Future、FutureTask配合使用,能异步得到线程的执行结果
6、sleep和wait有什么区别
sleep:是线程类Thread的静态方法,让线程进入睡眠状态,等休眠时间结束后,线程就进入就绪状态,和其他线程一起竞争CPU的执行时间,sleep不能改变对象的机锁,当一个synchronize块中调用sleep方法,线程虽然进入休眠状态,但是对象的机锁没有被释放,其他线程依然无法访问这个对象,这就会引发问题,
wait是object类的方法,当一个线程执行到wait方法时,他就会进入到一个和该对象相关的等待池,通是释放对象的机锁,使其他线程能访问,也可以通过notify和notifyall唤醒
7、run和start有什么区别
start用来启动线程,通过线程调用run方法中所定义的逻辑代码,start只能被调用一次,
run封装了要被线程执行的代码,可以被调用多次
8、如何停止一个正在运行的线程
使用退出标志正常退出
使用stop强行终止
使用interrupt方法中断线程
9、有三个线程T1、T2、T3,如何保证他们顺序执行
使用线程类的join方法在一个线程中启动另一个线程
10、线程的状态
new 新建
runnable 可运行
block 阻塞
watting 无线等待
timed_watting 计时等待
terminated 终止
11、线程池创建线程的七个参数
corePoolSize 线程池核心线程大小
maximumPoolSize 线程池最大线程数量
keepAliveTime 空闲线程存活时间
unit 空闲线程存活时间单位
workQueue 工作队列
ThreadFactory 线程工厂
handler 拒绝策略
12、死锁和活锁的区别
活锁就是两个线程之间相互影响,都无法继续执行,但是线程没有阻塞,都在忙于恢复对方的工作
死锁是两个或者多个线程互相持有对方所需要的资源,导致线程都处于等待状态,无法继续执行
13、ThreadLocal是什么,有哪些使用场景
是一个线程工具类,可以在一个线程之间共享数据,在项目中使用ThreadLocal是存储解析token的用户数据
底层是一个map进行数据存储,map键是当前线程对象,值就是要共享的数据