java面试题------多线程

java面试题------多线程

1.并行和并发有什么区别

  • 并行:是在多个cpu上并行运行程序
  • 并发:是在单个cpu上多线程进行交替运行在cpu上

2.线程和进程的区别

  • 进程:进程是一个程序的一次运行(例如:音乐播放器、QQ)。是资源分配的基本单元
  • 线程:线程是进程的一段逻辑或则一次活动。是cpu调度的基本单元,一个进程最少有一个线程。

3.守护线程是什么

  • 线程分为用户线程和守护线程。守护线程就在主程序运行时在后台运行提供某种服务的线程,例如:jvm虚拟机的垃圾回收机制。守护线程必须在主线程之前设置,否则会出现错误。守护线程启动的线程也是守护线程。当被守护线程结束,守护线程也随之结束。

4.创建线程的几种方式

  • 第一种:直接继承Thread类,重写父类的run方法。这种方法一般不常用,因为java是单继承,一但继承Thread类就不能继承其他类。
  • 第二种:实现Runnable接口,重写run方法,这种方法较为常用。
  • 第三种:实现Callable接口,重写call方法。

5.简述runnable和callable有什么区别

  • 返回值:Runnable无返回值,Callable可以定义返回值
  • 启动方式:Runnable可以通过Thread类或者是线程池来启动,但是Callable只能通过线程池启动
  • 异常机制:Runnable不允许抛出异常,Callable允许抛出异常,那么这就意味着Callable如果报错可以利用全局方式处理

6.线程有那些状态

  • 就绪:当线程执行了start方法,该线程就进入了就绪状态
  • 执行:当cpu调度该线程时,进入执行状态
  • 阻塞:当线程需要外界输入,或者调用了wait方法,线程被阻塞。
  • 睡眠:当线程调用了sleep方法,线程睡眠指定时长,然后在进入就绪状态
  • 结束:线程执行完成

7.sleep和wait有什么区别

  • sleep方法需要设置睡眠的时长,wait一般不需要设置,在加锁状态下,sleep不释放资源和锁,而wait需要释放资源和锁。sleep到指定时长自动唤醒,而wait不能主动唤醒,需要notifyAll来配合进行唤醒。

8.notify和notifyAll有什么区别

  • 当线程调用wait方法进入等待状态,当调用notify则只唤醒一个线程,notifyAll可以唤醒所有的线程。

9.创建线程池有哪几种方式

  • newFixedThreadPool:该线程池的特点是:没有临时线程全部都是核心线程,工作队列是一个阻塞时链式队列,默认容量是Integer.MAX_VALUE,可以认为能够存储无限多的任务,使用场景:比较长的任务,例如百度网盘下载资源。
  • newWorkStealingPool:创建一个线程池,保持足够的线程支持,给定的并行性水平,可以使用多个队列减少争用。对应的并行性水平最大线程数积极参与,或可用参与、任务处理。实际的线程数量动态增长和收缩。一个没有工作窃取池保证提交任务的顺序执行。
  • newCachedThreadPool:该线程池没有核心线程都是临时线程,临时线程数量是Integer.MAX_VALUE,也是无穷大的,工作队列是一个同步队列,使用场景:高并发,短任务场景
  • newScheduledThreadPool:定时线程,在线程启动之后,每隔n秒执行一次。

10.线程池都有哪些状态

  • Running:能够接收新任务,以及对已添加的任务进行处理
  • Shutdown:不能接受新任务,但可以对已添加任务进行处理
  • Stop:不能接受新任务,也停止已添加的任务,正在执行的任务也会终止
  • Tidying:当线程池任务为0个时,则是Tidying状态
  • Terminated:线程池彻底终止
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值