Java多线程面试题(每日背诵版day03)

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键是当前线程对象,值就是要共享的数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值