java多线程面试总结

创建线程的方式有哪些?

1.继承Thread类,重写run方法。2.实现Runnable接口,实现run方法。3.实现Callable接口,实现call方法,结合FutureTask。(可以获取线程的返回值)4.线程池创建线程。

线程的状态?

new创建线程是新建状态;执行.start(),进入可执行状态,获取到cup执行权力,就运行;若没有获取锁资源,会进入阻塞状态;执行wait方法,等待状态(需要手动唤醒,释放锁资源);执行sleep方法,计时等待状态;run方法执行完成,死亡状态。

java中wait与sleep方法的不同?

相同点:wait与sleep都会让线程放弃cup的执行权力,进入阻塞状态。

不同点:wait方法是Object类中的,执行wait方法需要手动用notify或notifyAll唤醒;wait方法必须先获取对象锁才能执行;wait方法释放锁对象。sleep是Thread的静态方法;sleep不需要手动唤醒,到时间自动唤醒;sleep是静态方法,所以无需锁就可以执行;sleep不释放锁。

synchronized关键字底层原理?

synchronized采用互斥的方式让同一时刻最多只有一个线程获取锁。它底层由Monitor实现,Monitor中有三个属性,onwer,entrylist,waitset。当来一个线程的时候,先判断onwer是否有关联获取锁的线程,没有直接关联当前线程,若有,则进入entrylist(存放没有获取锁而阻塞的线程);如果执行了wait,sleep方法,进行waitset(进入等待状态的线程);

synchronized锁的形式?

Synchronized是一种互斥锁,同一时刻最多一个线程获取锁。

Synchronized锁有三种形式,分别为重量级锁、轻量级锁、偏向锁。

重量级锁:多线程环境中发生竞争,synchrinized锁就为重量级锁,底层是monitor实现的(jvm对象)

轻量级锁:多线程环境中,没有竞争锁,线程是错开时间加锁。一个线程获取锁,然后释放,下一个线程再获取锁释放。

偏向锁:很长一段时间内,一个线程多次获取同一个对象锁。

线程池的核心参数?

核心线程数

最大线程数(临时线程数=最大线程数-核心线程数)

临时线程最大存活时间

临时线程最大存活时间单位

阻塞队列 (ArrayBlokingQueue,LinkedBlokingQueue)

线程工厂

拒绝策略 (直接抛出异常(默认);直接删除队列中第一个任务;直接放弃当前任务;用主线程执行)

流程:当来一个任务时,会先判断核心线程是否没有空闲的。若有空闲的,交给核心线程执行;若没有,会判断阻塞队列是否满了。若阻塞队列没有满,进入阻塞队列;若满了,新建临时线程。若达到最大线程数,则会触发拒绝策略。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL绘制Bezier曲面

Bezier的定义 贝塞尔曲面是贝塞尔曲线在二维上的扩展。它由一组控制点定义,通过这些控制点生成光滑的曲面。贝塞尔曲面通常用两个参数 u u u和 v v v来表示,这两个参数的取值范围都在 [0, 1] 之间。 数学表示 P ( u , v ) = ∑ i = 0 n ∑ j = 0 m p i j ⋅ B i , n ( u ) ⋅…

redis-基础篇(1)

黑马redis-基础篇笔记 1. 初识redis REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的…

Mybatis中BaseEntity作用

新建各种对象的时候,一般来说,有几个属性是所有对象共有的,比如说id,is_del,is_enable这些,然后设置一个基础对象,以后新建所有对象的时候都继承它,就省的每次都要写这些共有的属性了

Flask request 中获取访问的ip

在Flask中,可以通过request对象的remote_addr属性获取访问者的IP地址。以下是一个简单的示例代码: from flask import Flask, requestapp Flask(__name__)app.route(/) def index():ip_address request.remote_addrreturn f"Your IP address is …

HCIA-速查-ENSP模拟器2步清空配置

需求:清空模拟器配置 清空当前图中配置 步骤1:reset saved-configuration 后输入y确认 步骤2:reboot后输入n否认再输入y确认 验证已经清空配置

文件防篡改监控工具 - WGCLOUD全面介绍

WGCLOUD是一款优秀的运维监控软件,免费、轻量、高效,部署容易,上手简单,对新手非常友好 WGCLOUD部署完成后,点击菜单【文件防篡改】,可以看到如下页面 我们点击【添加】按钮,输入监控文件的信息…

Java面向对象的三大特性之一——继承

目录 一、继承概念 二、为什么要继承 三、继承语法(关键字extends) 四、父类成员访问 1、子类中访问父类的成员变量 (1)子类和父类不存在同名的成员变量 (2)子类和父类中存在同名的成员变量 2、子类中访…

React+TS 从零开始教程(1)

源码链接:https://pan.quark.cn/s/c6fbc31dcb02 创建项目 直接通过以下命令,我们来创建一个reactts的项目。 npx create-react-app myapp --template typescript这样就创建好了,然后我们导入vscode. npx是npm里面的一个库,可以让你自动使用…

ARM-V9 RME(Realm Management Extension)系统架构之系统启动

本节描述了初始化RME系统的要求。 目录 一、复位需求 二、RME禁用 一、复位需求 RME系统重置(即复位)是指重置整个系统的全局功能状态的任何系统事件。 RME系统重置包括处理单元(PEs)、处理单元集群(PE-clusters)、系统核心逻辑和辅助逻辑、所有系统…

构造函数、实例、原型对象三者之间的关系

在 JavaScript 中,构造函数、实例和原型对象之间有着密切的关系。下面是对它们之间关系的详细解析和代码示例: 构造函数:构造函数是一个特殊的函数,用于创建对象的模板。它定义了对象的属性和方法。构造函数通常以大写字母开头&a…

2-11 基于matlab的BP-Adaboost的强分类器分类预测

基于matlab的BP-Adaboost的强分类器分类预测,Adaboost是一种迭代分类算法,其在同一训练集采用不同方法训练不同分类器(弱分类器),并根据弱分类器的误差分配不同权重,然后将这些弱分类器组合成一个更强的最终…

云专线组网方案的特性和实施要素

云专线组网方案是指企业通过专用的网络连接,将其内部网络与云服务商的数据中心直接相连,从而实现高速、安全、稳定的云资源访问。云专线通常提供比公共互联网更优的网络性能,包括更低的延迟、更高的带宽和更强的安全性。以下是云专线组网方案…

物联网设备安装相关知识整理

拓扑图 对于ADAM-4150先接设备的整体的供电。 ADAM-4150就涉及到几个电子元器件的连接,一个是485-232的转换器,一个是将RS-232转换为USB的转接口,因为现在的计算机很多都去掉了RS-232接口而使用USB接口。 4150右侧有个拨码,分别两…

UniApp 开发微信小程序教程(一):准备工作和环境搭建,项目结构和配置

文章目录 一、准备工作和环境搭建1. 安装 HBuilderX步骤: 2. 注册微信开发者账号步骤: 3. 创建 UniApp 项目步骤: 二、项目结构和配置1. UniApp 项目结构2. 配置微信小程序修改 manifest.json修改 pages.json 3. 添加首页文件index.vue 示例&…

排序之快速排序

快速排序之所以叫快速排序,肯定要配得上它的名字。我们就来看看它是如何这么快的。 快速排序的原理 快速排序是霍尔创建的,是通过以第一个或者最后一个数值作为比较值key,形成一个它的左边比它都小,右边比它都大的情况&#xff0…

redHat9 安装 iptables 过程记录

1. redHat9安装 iptables: 方法1:对于使用 yum 的旧版 Red Hat 9: yum install iptables-services 方法2:对于使用 dnf 的新版 Red Hat 9 或 CentOS: dnf install iptables ps: 可能会报错,诸如 connect f…

家用电器信息管理系统

摘 要 随着互联网的快速发展,传统家电行业受到冲击,逐渐向智能家居市场转型。因此,智能家居无疑是一个有着巨大市场需求和新兴发展空间的新兴产业,也是人们追求安全、便捷、舒适的生活方式的必然趋势。互联网推动了我国传统家居产…

从复用性角度阐述中台建设

目录 复用性中台定义深思中台建设产品线形态何时演变中台能力落地中台 业务中台架构总结 技术学习永不止步,最近也是看了很多关于架构设计相关的专栏,慢慢总结出来一部分知识,代入自己的思考与理解,以及结合并反思自己之前公司的架…

transformers Tokenizer

☆ 问题描述 Tokenizer的学习笔记(Tokenizer is all you need) Tokenizer用于数据预处理 - 分词 - 构建词典 - 数据转换 - 数据填充与截断 现在Tokenizer可以做到上面的所有事情。 ★ 解决方案 Tokenizer的基本使用 # 导入Tokenizer from transforme…

java经典面试题--进程和线程的关系/区别

进程和线程的定义以及作用 进程:进程是操作系统分配资源的基本单位,是程序的一次执行过程,它包括了程序执行的上下文环境,包括程序代码、数据、系统资源(内存、文件、设备等)以及执行状态等信息,其作用是提供一个独立的执行环境,…