Java面试题(6)

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

newFixedThreadPool(int nThreads) :创建一个固定长度的线程池,如果有线程发生错误而结束, 线程池会补充一个新线程。

newCachedThreadPool() :创建一个可缓存的线程池,会自动回收和创建空闲线程和新线程。 newSingleThreadExecutor() : 这是一个单线程的 Executor,它创建单个工作线程来执行任务,如 果这个线程异常结束,会创建一 个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执 行。

newScheduledThreadPool(int corePoolSize) :创建一个固定长度的线程池,可以延迟和定时执 行。 Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程 池。 Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)【JDK 1.8 添 加】。

ThreadPoolExecutor: 手动创建线程池的方式,它创建时最多可以设置 7 个参数:

1. corePoolSize:线程池中的常驻核心线程数

2. maxinumPoolSize:线程池中能够容纳同时执行的最大线程数,此值必须大于等于一

3. keepAliveTime:多余的空闲线程的存活时间。当前线程池数量超过corePoolSize时,当空闲时间 达到keepAliveTime时,多余空闲线程会被销毁直到只剩下corePoolSize个线程为止。

4. unit:keepAliveTime的单位

5. workQueue:任务队列,被提交但是尚未被执行的任务。

6. threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般用默认的即可。

7. handler:拒绝策略,表示当队列满了并且工作线程-大于等于线程池的数量最大线程数 (maxinumPoolSize)时如何来拒绝请求执行的runnable的策略。

(1)线程池都有那些状态 Running、ShutDown、Stop、Tidying、Terminated。

Running:接受新任务、处理等待队列中的任务

ShutDown:不接受新任务、但依然处理等待队列中的任务

Stop:不接受新任务,也不处理等待队列中的任务

TIDYING:所有任务都已终止,workerCount 为零,线程转换到 TIDYING 状态将运行 terminated() 钩子方法。

TERMINATED:terminated() 已完成。

(2)线程池中submit()和execute()有什么区别

1. 接受参数不同

2. submit有返回值,而execute没有返回值

3. submit方便Exception处理

29.在java程序中如何保证多线程的运行安全

线程安全体现在三个方面

1. 原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作

2. 可见性:一个线程对主内存的修改可以及时地被其他线程看到

3. 有序性:在java内存模型中说过,为了性能优化,编译器和处理器会进行指令重排序;也就是说 java程序天然的有序性可以总结为:如果在本线程内观察,所有的操作都是有序的;如果在一个线 程观察另一个线程,所有的操作都是无序的。

30.多线程锁的升级原理是什么

在java中,锁一共有四种状态,级别从低到高依次为:无状态锁-》偏向锁-》轻量级锁-》重量级锁-》, 这几个状态会随着竞争情况逐渐升级,但不可以降级。

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或由于彼此通信而造成的一种阻塞现象, 若无外力作用,他们都将无法推进下去。此时系统处于死锁状态或系统产生了死锁,这些永远在互相等 待的进程称为死锁进程。是操作系统层面的一个错误,是进程死锁的简称,最早在1965年由Dijkstra在 研究银行家算法时提出的,它是计算机操作系统乃至整个并发程序设计领域最难处理的问题之一。

31.怎么防止死锁

缺省死锁产生的四个必要条件就可以了。在系统设计、进程调度等方面注意如何不让这四个必要条件成 立,如何确定资源的合理分配算法,避免进程永久占据系统资源。 此外,也要防止进程在处于等待状态的情况下占用资源因此,对资源的分配要给与合理的规划。

(1)死锁的四个必要条件

1. 互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待, 直到占有该资源的进程使用完成后释放该资源。

2. 请求和保持条件:进程获得一定的资源后,又对其他资源发出请求,但是该资源可能被其他进程占 有,此时请求阻塞,但又对自己获得的资源保持不放。

3. 不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完成后自己 释放。

4. 环路等待条件:是指进程发生死锁后,若干进程之间形成一种头尾相接的循环等待资源关系。

32.ThreadLocal是什么。

是用来支持线程局部变量的一个java类,使得局部变量只属于线程自身所有,不被多个线程共享,是一 种实现线程安全的方式。

33.说一下synchronized

synchronized是java中的一个关键字,是一种同步锁,他可以修饰代码块、方法,静态方法。 synchronized可以保证该方法或代码块在运行时,同一时刻只有一个方法进入到临界区,同时他 还可以保证共享变量的内存可见性。

java中每一个对象都可以作为锁,这就是synchronized实现同步的基础

普通同步方法:锁是当前实例对象

静态同步方法:锁是当前类的class对象

同步方法块:锁是括号里面的对象

(1)synchronized和volatile的区别是什么

1. volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中 读 取; synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞 住。

2. volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别。

3. volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改 可见性和原子性。

4. volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。

5. volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化。

(2)synchronized于Lock有什么区别

1. synchronized是java中的一个关键字,而Lock是一个类

2. synchronized无法判断是否获取到了锁,而Lock可以判断是否获取到了锁

3. synchronized会自动释放锁,而Lock需要在finally中手动释放锁(unlock()方法)

4. synchronized适合代码少量的同步问题,而Lock适合代码大量的同步问题

(3)synchronized和ReentrantLock(可重入锁)的区别是什么

1. synchronized是java重的一个关键字,而ReentrantLock是类。

2. ReentrantLock比synchronized更灵活,可扩展。

3. 响应中断不同:ReentrantLock 可以响应中断,解决死锁的问题,而 synchronized 不能响应中 断。

4. 二者的锁机制其实也是不一样的:ReentrantLock 底层调用的是 Unsafe 的 park 方法加锁, synchronized是 JVM 层面通过监视器实现的。

34.说一下atomic的原理

  • Atomic 包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型 及引 用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时, 仅有一个 线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。
  • Atomic 系列的类中的核心方法都会调用 unsafe 类中的几个本地方法。我们需要先知道一个东 西 就是 Unsafe 类,全名为:sun.misc.Unsafe,这个类包含了大量的对 C 代码的操作,包括很多直 接内存分配以及原子操作的调用,而它之所以标记为非安全的,是告诉你这个里面大量 的方法调 用都会存在安全隐患,需要小心使用,否则会导致严重的后果,例如在通过 unsafe 分配内存的时 候,如果自己指定某些区域可能会导致一些类似 C++一样的指针越界到其他进 程的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/350592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

spring cloud之分布式事务

写在前面 1:分布式事务介绍 参考MySQL之分布式事务 。 2:seata实战 架构图: 可以看到seata在这里作为协调者的角色,协调所有事务的提交以及回滚,其中seata使用MySQL存储每个分支事务的执行状态信息,以…

webassembly003 whisper.cpp的main项目-1

参数设置 /home/pdd/le/whisper.cpp-1.5.0/cmake-build-debug/bin/main options:-h, --help [default] show this help message and exit-t N, --threads N [4 ] number of threads to use during computation-p N, --processors …

使用css将文字在水平线中显示

方法一&#xff1a; 1.效果图 2.html <!-- <div class"line">第三方登录</div> --> 3.css /* 让文字在水平线中显示 */.line {display: flex;flex-direction: row;color: #ccc;font-size: 18px;font-weight: bolder; }.line:before, .line:aft…

Servlet API

Servlet的API就是一组类和方法 其中主要的三个类有 HttpServlet HttpServletRequest HttpServletResponse HttpServlet 这是编写Servlet代码用到的核心类 通过继承这个类 并重新写其中的方法 让tomcat去调用到这里的逻辑 方法名称调用时机init在HttpServlet实例化之后被调用…

攻防世界WEB新手训练区

view_source 此题我愿称之为网安领域的hello world 查看网页源代码的方式一般有—— 右键->查看网页源代码F12->源代码/来源Ctrlu 随后可以再代码第17行处找到flag&#xff0c;至此迈入网安第一步。可喜可贺&#xff0c;可喜可贺... get_post 考察http的两种请求方式&…

【大数据面试题】HBase面试题附答案

目录 1.介绍下HBase 2.HBase优缺点 3.介绍下的HBase的架构 4.HBase的读写缓存 5.在删除HBase中的一个数据的时候&#xff0c;它是立马就把数据删除掉了吗? 6.HBase中的二级索引 7.HBase的RegionServer宕机以后怎么恢复的? 8.HBase的一个region由哪些东西组成? 9.…

论述Python中列表、元组、字典和集合的概念

Python列表是用于存储任意数目、任意类型的数据集合&#xff0c;包含多个元素的有序连续的内存空间&#xff0c;是内置可变序列&#xff0c;或者说可以任意修改。在Python中&#xff0c;列表以方括号&#xff08;[ ]&#xff09;形式编写。 Python元组与Python列表类似&#x…

oak-d-lite摄像头 去噪处理

前言 试过了各种滤波才知道&#xff0c;为啥oak在示例算法只是使用5X5滤波而不使用更好的滤波的原因了。 实验内容 oak-d-lite使用的工业相机噪声主要表现为随机的亮度变化&#xff0c;使用Non-Local Means Denoising算法后去噪效果很好&#xff08;左为原图&#xff09;&…

3D建模素材网站的特点有哪些?

3D建模素材网站的特点主要包括丰富多样的模型种类、高质量的模型、实时预览功能、易于使用、价格合理以及社区互动等。这些特点使得3D建模素材网站成为设计师们不可或缺的资源之一&#xff0c;帮助他们快速高效地完成设计工作。 那么3D建模素材网站的特点有哪些? 1、模型种类丰…

【复现】Laykefu客服系统后台漏洞合集_29

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 2. 漏洞二&#xff1a; 3. 漏洞三&#xff1a; 4. 漏洞四&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Laykefu客服系统是thinkphp5Gatewayworker搭建的web客服…

「QT」QString类的详细说明

✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「

契约锁高校行业电子签应用报告

高校数字化建设起步早&#xff0c;也是电子签章应用最为广泛的行业之一。为了及时为高校组织提供服务参考&#xff0c;契约锁整合了近年在高校行业的方案、场景、案例等资源生成“高校电子签应用报告”&#xff0c;随时为数字化校园建设助力。 高校电子签建设所需资料都在这 整…

ps---1.使用置入嵌入的智能化对象命令制作拼贴画

ps—使用置入嵌入的智能化对象命令制作拼贴画 素材 步骤 打开背景图 置入嵌入对象&#xff08;置入完&#xff0c;移动到正确的位置&#xff0c;回车或双击&#xff09; 栅格化图层 重复上述步骤制作拼贴画

图像读写(imgcodecs 模块)与视频读写

内置格式 OpenCV 可以在没有任何第三方库帮助的情况下读取以下格式&#xff1a; BMP的 高动态范围 (WITH_IMGCODEC_HDR) 太阳栅格 (WITH_IMGCODEC_SUNRASTER) PPM、PGM、PBM、PFM&#xff08;、WITH_IMGCODEC_PXMWITH_IMGCODEC_PFM) PNG、JPEG、TIFF、WEBP 支持 格式选择…

[SUCTF 2019]CheckIn1

黑名单过滤后缀’ph&#xff0c;并且白名单image类型要有对应文件头 对<?过滤&#xff0c;改用GIF89a<script languagephp>eval($_POST[cmd]);</script>&#xff0c;成功把getshell.gif上传上去了 尝试用.htaccess将上传的gif当作php解析&#xff0c;但是失败…

Flask 之旅 (二):表单

背景 上一篇帖子我们使用 Flask 创建了最基本的 web 服务。使用 bootstrap 对页面进行装点&#xff0c;使用 JQuery Ajax 实现了在页面上实时显示 log 的功能。趁着周末&#xff0c;我继续开始学习更多的东西以满足这个 web 服务的需求。 模板继承 之前我们有了首页&#xf…

多线程-单例模式

目录 1.单例模式 举例&#xff1a; 1.1单例模式的实现 饿汉模式&#xff1a; 懒汉模式&#xff1a; 1.单例模式 单例模式是一种设计模式。单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例. 举例&#xff1a; package 多线程;import javax.manage…

Django从入门到精通(三)

目录 七、ORM操作 7.1、表结构 常见字段 参数 示例 7.2、表关系 一对多 多对多 第一种方式 第二种方式 7.3、连接MYSQL 7.4、数据库连接池 7.5、多数据库 读写分离 分库&#xff08;多个app ->多数据库&#xff09; 分库&#xff08;单app&#xff09; 注意…

微服务入门篇:Eureka注册中心(作用,搭建Eureka客户端和服务端)

目录 1.提供者与消费者2.Eureka的作用3.搭建EurekaServer1.配置服务端2.配置客户端3.复制实例操作4.服务拉取 1.提供者与消费者 ①服务提供者:一次业务中&#xff0c;被其它微服务调用的服务。&#xff08;提供接口给其它微服务) ②服务消费者:一次业务中&#xff0c;调用其它微…

【机器学习】全网最全模型评价指标(性能指标、YOLOv5训练结果分析、轻量化指标、混淆矩阵详解)【基础收藏】

&#x1f951; Welcome to Aedream同学 s blog! &#x1f951; 文章目录 模型性能指标常见指标ROC/AUCROC & PRC多分类问题——混淆矩阵 计算结果分析——以YOLO v5为例1. confusion_matrix.png(混淆矩阵)2. F1_curve&#xff1a;3. labels.jpg4. labels_corrrelogram.jpg5…