java并发面试题

线程和进程

进程是程序的一次执行过程,是系统运行程序的基本单位。

线程是更小的执行单位,多个线程共享进程的堆和方法区资源。

一个进程可以有多个线程,多个线程共享进程的堆和方法区。

线程的生命周期和状态

初始状态:线程被构建,但是还没开始

运行状态:就绪和运行统称为运行中

阻塞状态:线程阻塞于锁

等待状态:线程进入等待状态

超时等待:可以在指定时间自行返回

终止状态:线程已经执行完毕。

线程创建后处于新建状态,调用start方法开始运行,处于可运行状态,如果获得了时间片就得到了运行状态。当线程执行wait方法的时候进如等待状态,需要其他线程通知才能返回运行状态。超市等待是在等待的基础上增加了时间限制,通过sleep方法或者wait方法可以置于好事等待方法。超市时间到达进行运行状态,当线程同步的时候,没有获取到锁,进入阻塞状态。在执行run方法后进入终止状态。

线程死锁

多个线程同时阻塞在等待资源

互斥条件:一个资源只能由一个线程战友

请求与保持:一个线程请求资源的时候对已经获得的资源保持不放

不剥夺条件:线程已经获得资源不能被强行剥夺

循环等待:一个线程等待着另一个线程形成循环

破坏死锁:

破坏形成线程的条件

银行家算法

sleep和wait方法

sleep没有释放锁,wait释放了锁

sleep用于暂停执行,执行完成了,线程会自动苏醒。wait用于线程交互,如果调用后 不会自动苏醒,需要notify唤醒

为什么调用start会执行run,而不能直接调用run

调用satrt可以启动线程并进入就绪状态,直接执行run会不会以多线程方法执行。

synchronize

用于线程同步,表示被修饰的在任意时刻只能有一个线程执行

修饰实例方法、修饰静态方法、修饰代码块

构造方法本身就是线程安全的不需要修饰

synchronize 和reentrantlock的区别

两者都是可重入锁

synchronize依赖于JVM,reentrantlock依赖于API

reentrantlock等待可冲段,可以实现公平锁或者非公平锁,可以通知

synchronize和volatile

volatile是线程同步的轻量级实现,只能用于变量。

可以保证数据的可见性,但是不能保证原子性

主要用于解决变量在多个线程的可见性。sync用于放问资源的同步性。

实现多线程的方法

编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有四种方法,Thread,Runnable,Callable,使用Executor框架来创建线程池。

Runnable和Callable的区别是,
(1)Callable规定的方法是call(),Runnable规定的方法是run().
(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
(3)call方法可以抛出异常,run方法不可以
(4)运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

创建线程池的方法

1.ThreadPoolExecutor 类构造方法(推荐)

2.通过 Executor 框架的工具类 Executors 来实现

FixedThreadPool : 该方法返回一个固定线程数量的线程池。

SingleThreadExecutor: 方法返回一个只有一个线程的线程池。

CachedThreadPool: 该方法返回一个可根据实际情况调整线程数量的线程池。

线程池核心参数

corePoolSize:核心线程数量,最小可以同时运行的线程数量

maximumPoolSize:可以同时运行的最大线程数

workQueue:存放线程的队列

KeepAliveTime:当线程池中的线程数大于核心线程数的时候,可以在等待的时间

unit:KeepAliveTime的时间单位

threadFactory:线程工厂

handler:饱和策略

线程池的饱和策略

AbortPolicy中止策略:抛出异常终止

DiscardPolicy抛弃策略:不处理直接丢弃

DiscardOldestPolicy抛弃旧任务策略:丢弃最早未处理的请求

CallerRunsPolicy调用者运行:调用自己的线程运行任务

JVM内存区域

线程私有的:程序计数器、虚拟机栈、本地方法栈

线程共享的:堆、方法区、直接内存

JVM对象的创建过程

类加载检测

分配内存

初始化零值

设置对象头

执行init方法

AQS:

构建锁和同步器的框架

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值