栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java并发面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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用于放问资源的同步性。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/397144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号