java中多线程常见面试题

Windows 2012 SYSVOL复制失败的处理 题外话:晓原理、知架构、查日志是排错的三件法宝今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。这是怎么一回事呢,pin... 阅读详情

1、开发过程中,什么时候考虑使用多线程

异步处理时候需要使用多线程:比如记录日志,发短信

数据的分析,数据迁移的时候,可以用多线程,比如hadoop中mapreduce计算时候,可以增加分区

  • 发短信,app消息提醒等场景。在营销活动中,用户中奖了,需要短信提醒。可以将发短信的业务放入到另外一个线程中执行,用户晚一会收到短信对整体的业务流程也不会受到影响,反而提升了用户体验
  • 推送场景:比如有一个业务场景,有一个报表监管系统,当收到数据之后,需要将这些数据发送给第三方的监管系统,数据量有百万之多,一条数据按照一秒计算,那需要经过百万秒,200多个小时才能处理完,考虑引入多线程进行并发操作,降低数据推送时间,提高数据推送的实时性

2、java线程创建的方式

1、继承Thread类 2、实现runnable接口 3、继承callable接口 4、基于线程池创建线程

3、为什么用线程池,解释下线程池参数

线程池本质上是一种池化技术,而池化技术是一种资源复用的思想,为了减少线程频繁创建和销毁带来的性能开销,因为线程创建会涉及到CPU上下文切换、内存分配等工作。线程池本身会有参数来控制线程创建的数量,这样就可以避免无休止的创建线程带来的资源利用率过高的问题,起到了资源保护的作用。
线程池参数七大参数

  • corePoolsize 核心线程数:正常情况下创建的工作的线程数,这些线程创建后并不会立马消除,一种常驻住线程
  • maxinumPoolSize 最大线程数:表示允许创建的最大线程数
  • keepAliveTime 表示超出线程数之外的线程数空闲存活时间
  • unit keepAliveTime 的计量单位
  • workQueue:用来存放待执行任务的队列
  • threadFactory:创建一个线程工厂用来生产线程,可以用来设定线程名
  • handler:任务拒绝策略

4、Java线程池的工作流程

一个新的任务提交到线程池时:

  • 线程池判断核心线程池里的核心线程是否都在执行任务。 如果不是,让空闲的核心线程来执行任务。如果核心线程池里的线程都在执行任务,则进入下个流程。
  • 线程池判断阻塞队列是否已满。 如果阻塞队列没有满,则将新提交的任务存储在阻塞队列中。如果阻塞队列已满,则进入下个流程。
  • 判断线程池里的线程数量是否小于最大线程数量(看线程池是否满了)。 如果小于,则创建一个新的工作线程(非核心线程,并给它设置超时时间,当我们处理完这些任务,无需手动销毁这个非核心线程,超时自动销毁)来执行任务。如果已满,则交给拒绝策略来处理这个任务。

5、线程池拒绝策略及任务队列

四种拒绝策略

  • AbortPolicy 直接丢弃任务,抛出RejectedExecution异常,是默认策略
  • DiscardPolicy 直接丢弃任务,但不抛出异常
  • DiscardOldestPolicy 丢弃等待队列中最旧的任务,并执行当前任务
  • CallerRunsPolicy 用调用者所在的线程处理任务

四种任务队列

  • 直接提交的任务队列,设置为SynchronousQueue队列,SynchronousQueue是一个特殊的BlockingQueue,它没有容量,每执行一个插入操作就会阻塞。
  • 有界的任务队列 如ArrayBlockingQueue
  • 无界的任务队列 如LinkedBlockingQueue
  • 优先任务队列 如PriorityBlockingQueue

6、Java线程池如何合理配置核心线程数?如何去设置呢?

  1. CPU 密集型任务:比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务,大部分场景下都是纯 CPU 计算。因此,对于 CPU 密集型的计算场景,理论上线程的数量 = CPU 核数就是最合适的,不过通常把线程的数量设置为CPU 核数 +1,会实现最优的利用率。
  2. IO 密集型任务:比如像 MySQL 数据库、文件读写、网络通信等任务,这类任务不会特别消耗 CPU 资源,但是 IO 操作比较耗时,会占用比较多时间。线程数 = CPU 核心数 * (1 + IO 耗时/ CPU 耗时) 或是IO密集型:核心线程数 = CPU核数 * 2

7、请详细描述一下线程从创建到死亡的几种状态都有哪些?

  • 新建( new ):新创建了一个线程对象。
  • 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。
  • 运行( running ):可运行状态( runnable )的线程获得了 cpu 时间片( timeslice ) ,执行程序代码。
  • 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu 使用权,也即让出了 cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有 机会再次获得 cpu timeslice 转到运行( running )状态。
  • 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

8 、线程池都有哪些状态?

  • RUNNING:这是最正常的状态,接受新的任务,处理等待队列中的任务。
  • SHUTDOWN:不接受新的任务提交,但是会继续处理等待队列中的任务。
  • STOP:不接受新的任务提交,不再处理等待队列中的任务,中断正在执行任务的线程。
  • TIDYING:所有的任务都销毁了,workCount 为 0,线程池的状态在转换为 TIDYING 状态时,会执行钩子方法 terminated()。
  • TERMINATED:terminated()方法结束后,线程池的状态就会变成这个。

9、sleep()和wait()区别

sleep()来自thread,wait()来自object();

sleep()不释放锁,wait释放锁

sleep()时间到了会自动恢复,wait()可以使用notify()直接唤醒

10、说说java内存模型

java内存模型(JMM)是线程间通信的控制机制.JMM定义了主内存和线程之间抽象关系。线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。

11、在 Java 程序中怎么保证多线程的运行安全?

方法一:使用安全类,比如 Java. util. concurrent 下的类。

方法二:使用自动锁 synchronized。

方法三:使用手动锁 Lock。 手动锁 Java 示例代码如下:

Lock lock = new ReentrantLock();
lock. lock();
try {
System. out. println("获得锁");
} catch (Exception e) {
// TODO: handle exception
} finally {
System. out. println("释放锁");
lock. unlock();
}

12、JAVA如何在两个线程之间共享数据

Java 里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性和有序性原子性。Java 内存模型(JMM)解决了可见性和有序性的问题,而锁解决了原子性的问题,理想情况下我们希望做到“同步”和“互斥”。有以下常规实现方法:
将数据抽象成一个类,并将数据的操作作为这个类的方法
1. 将数据抽象成一个类,并将对这个数据的操作作为这个类的方法,这么设计可以很容易做到同步,只要在方法上加“synchronized“。

2. 将 Runnable 对象作为一个类的内部类,共享数据作为这个类的成员变量,每个线程对共享数据的操作方法也封装在外部类,以便实现对数据的各个操作的同步和互斥,作为内部类的各个 Runnable 对象调用外部类的这些方法。

15、人工智能社会学:关系视角下的机器相遇 本文探讨了将人工智能视为社会主体的可能性,提出了一种关系视角下的人工智能社会学。通过结合卢西亚娜·帕里西、艾伦·图灵和乔治·赫伯特·米德的理论,强调不确定性在人工智能运行中的核心地位,并分析了人工智能如何通过与社会环境的互动催生新奇性,从而拓展社会学的研究范畴。文章还讨论了人工智能对社会结构和社会互动的影响,以及其作为社会主体所带来的理论和实践意义,为未来人工智能社会学的发展提供了方向。 阅读详情

相关推荐

深入解析docx4j:从Word到PDF的高保真转换实战

本文深入解析了如何使用纯Java开源库docx4j实现Word到PDF的高保真转换。针对中文环境,重点讲解了字体映射原理、Linux服务器字体部署方案,并提供了完整的代码示例和配置方法。同时,文章涵盖了表格、图片处理、性能优化及生产环境部署指南,帮助Java开发者构建稳定、可控的文档转换服务。

weixin_29237635的博客 673

Java多线程之线程通信

创建两个线程,一个是生产者线程,蒸包子,另一个是消费者线程,吃包子,要求两个线程轮流执行(先生产再消费)。

u012135697的博客 1107

控制障碍函数(Control Barrier Function,CBF) 二、示例

使用一个经典简单的示例讲解CBF的推导

Lyajpunov的博客 6432

java多线程常见的面试题

java多线程常见的面试题什么是进程什么是线程线程和进程的区别线程有哪几种状态?它们之间如何流转的?多线程之间如何进行通信?线程中的wait()和sleep()方法有什么区别?实现线程有哪几种方式怎么终止一个线程?如何优雅地终止线程?1.利用退出标志终止线程2.使用interrupt方法中断线程3.使用stop方法强行终止线程(不推荐使用)说说violatile关键字有什么用,和Synchroni...

wy_0830的博客 1210

【大模型】大模型知识蒸馏 综述解读(Knowledge Distillation of Large Language Models)

知识蒸馏的(论文)方法总结。归纳了通过数据(如指令、对话、多模态)和训练方法(SFT、RL、数据增强),将复杂技能(如对齐、工具使用、多模态)蒸馏到开源模型的核心框架,附典型模型示例(如Alpaca、LLaVA)。

songxia928_928的博客 4336

交通小白首投TRB就中Oral?我的完整时间线与避坑指南(附Editorial Manager实操截图)

本文详细解析了交通领域新手如何高效完成TRB国际会议投稿的全流程,从选题策略到投稿系统实操,再到评审过程解析和常见误区避坑指南。特别针对初次投稿者提供了实用建议,包括时间规划、选题考量、Editorial Manager系统操作技巧,以及如何应对评审意见。文章还分享了从录用到会议参与的关键步骤,帮助研究者提升投稿成功率。

weixin_27303545的博客 387

java多线程发牌 一个发牌 三个玩家_Java多线程常见面试题

  Java多线程常见面试题,Java多线程相关面试题可以说是不可避免的,所以今天好程序员将为大家分享一些。 一、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?  这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。 二、在Java中Lock接口比synchronized...

weixin_32191249的博客 163

嵌入式开发避坑指南:手把手教你用STM32CubeMX配置W9825G6KH SDRAM(含时序参数详解)

本文详细介绍了如何使用STM32CubeMX配置W9825G6KH SDRAM,包括硬件连接检查、CubeMX初始化步骤、时序参数优化及稳定性问题排查。通过实测波形分析和案例分享,帮助开发者避免常见配置错误,提升嵌入式系统性能与稳定性。

weixin_42542669的博客 197

Java多线程常见面试题

1. 并行和并发有什么区别? 并行(Parallel):指两个或者多个事件在同一时刻发生,即同时做不同事的能力。例如垃圾回收时,多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。 并发(Concurrent):指两个或多个事件在同一时间间隔内发生,即交替做不同事的能力,多线程是并发的一种形式。例如垃圾回收时,用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继...

SileeLiu的博客 1万+

【ESP32CAM+Android+OpenCV】自定义目标数据集、训练自己的OpenCV模型部署到手机APP并对ESP32CAM无线图传显示并实时检测识别目标_资料编号30

本项目实现自定义目标数据集(想检测什么就检测什么,按照本文教程自己来更换目标)、训练自己的OpenCV模型实时检测识别(pycharm工程)。手机APP(Android studio工程)部署OpenCV模型实现对ESP32CAM(arduino工程)无线WIFI图传过来的图像实时检测识别。 本文以火焰检测识别为例进行演示,通过该过程,结合本文可自定义尝试更换为其它目标的检测,例如更换为车辆、车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人、口罩、行为、水果、植物、农作物、建筑、损伤等等部署进行检测。

嵌入式阿齐Archie 3482

开源Harness项目DeerFlow 2.0,让智能体几乎能完成任何复杂任务

从提示工程到上下文工程,再到如今的 Harness,这条演进路径的本质是从“教模型如何理解人类”迈向“为模型构建一个可执行、可信赖、可长期运转的数字世界”。 当越来越多像 DeerFlow 2.0 这样的 Super Agent Harness 走向普及,AI 将真正进化为能理解、会规划、可执行、敢交付、长期负责的成熟生产力形态。

技术引领业务创新 519

【Java】常见面试题:多线程

— 网上大部分说法是错误的。只要你具体说出一个数字都是错误的!因为我们在这里是不可以确定出具体的个数的。理由:① 主机的CPU的配置不确定;②程序的执行特点(也就是:代码里具体都干了啥?是CPU密集型的任务还是IO密集型的任务)也是不确定的。执行特点:也就是代码里具体都干了啥?是CPU密集型的任务(做了大量的算术运算和逻辑运算)还是IO密集型的任务(做了大量的读写网卡/读写硬盘)有些程序代码里既需要进行很多的CPU密集型任务,又需要很多的IO任务,则此时是很难量化该进程的两种任务的比例的。

Xian meng在努力呐-的博客 8896

使用 Simulink 和 Simscape Electrical 工具箱设计一个 Buck 转换器系统

Buck 转换器(降压转换器)是一种常用的 DC-DC 转换器,用于将较高的输入电压转换为较低的输出电压。为了评估其抗干扰能力,我们可以在模型中引入不同的干扰源,并观察系统的响应情况。电网电压波动:输入电压的变化。负载突变:负载电阻或电感的变化。电磁干扰:高频噪声或脉冲干扰。通过模拟这些干扰,我们可以分析系统的动态响应特性,并采取相应的措施来提高系统的抗干扰能力。

xiaoheshang_123的博客 378

java面试题_Java多线程常见面试题

  Java多线程常见面试题,Java多线程相关面试题可以说是不可避免的,所以今天好程序员将为大家分享一些。 一、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?  这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。 二、在Java中Lock接口比synchronized...

weixin_39537049的博客 245

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java多线程常见面试题_Java多线程七个常见面试题你会吗?

Java多线程常见面试题,Java多线程相关面试题可以说是不可避免的,所以今天好程序员将为大家分享一些。一、现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。二、在Java中Lock接口比synchronized块的优势是什...

weixin_42607969的博客 138

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java多线程常见面试题(上)

前言 Java 语言一个重要的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎。大多数待遇丰厚的 Java 开发职位都要求开发者精通多线程技术并且有丰富的 Java 程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。 在典型的 Java 面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承 thre...

测试架构师养成记的博客 1912

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

【面试题系列】Java多线程常见面试题

Java中的线程安全是指在多线程环境下,多个线程同时访问共享数据时,不会出现数据竞争、死锁和其他并发问题。为了保证线程安全,可以采用以下几种方式来实现:使用synchronized关键字:通过对方法或代码块进行同步,可以保证在同一时刻只有一个线程能够访问共享资源。synchronized可以保证互斥同步,防止线程之间的竞争和冲突。使用Lock接口:Java提供了Lock接口来实现锁,与synchronized不同,Lock可以提供更灵活的锁机制,可以实现更复杂的并发操作。

颜淡慕潇 8395

Java多线程 常见面试题

Java多线程 常见面试题

yuanchun的知识整理 2820

Java多线程中常见面试题

1、多线程有几种实现方案,分别是哪几种? 继承 Thread 类 实现 Runnable 接口 通过线程池,实现 Callable 接口 2、同步有几种方式,分别是什么,并分别说出其同步锁对象? 同步代码块 ==> 同步锁对象为:任意对象 同步方法 ==> 同步锁对象为:this 静态同步方法 ==> 同步锁对象为:本类名.class 3、启动一个线程时 run() ...

ONESTARの博客 2137

Java多线程常见知识点&面试题总结 - Java多线程(下)

秋招后端开发面试题,Java多线程

栗子酱的Blog 1032
上一篇: ChatGLM2-6B模型推理流程和模型架构详解
下一篇: Java面试知识点总结
普通网友
博客等级 码龄4年 3126粉丝 192原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值