java多线程常见面试题

1、线程和进程的区别

  1. 本质区别: 进程是一个程序的实例,是操作系统资源分配的最小单位;,是任务调度与执行的最小单位
  2. 包含关系: 进程至少由一个线程组成,线程可看做轻量级进程
  3. 资源开销: 进程有自己的资源可以单独执行,进程之间的切换会有较大的开销;线程不独有资源,共享着进程的资源,每个线程有自己的栈和程序计数器,线程切换开销小。
  4. 健壮影响: 线程崩溃后一般不影响其他进程,线程崩溃后可能导致整个进程终止。
  5. 进程之间有父子关系;线程没有,但是有main方法作为主线程
  6. 因为线程之间存在共享资源的问题,可能存在对同一临界资源的争夺,存在同步和互斥关系。

2、什么是守护线程

守护线程和用户线程
用户线程就是正常意义上的线程,我们执行程序时默认的都是用户线程。
守护线程是指在程序运行的后台提供的通用线程,顾名思义,守护线程就是用户线程的守护者,基本构造和用户线程是一样的,除了一点:
当 jvm 关闭后守护进程才关闭。也就是说只要还存在用户线程时,守护线程就一定在。
例如:将一个线程设置为守护线程的方法就是在调用start()启动线程之前调用对象的setDaemon(true)方法。
守护线程的一个典型的例子就是垃圾回收器。只要JVM启动,它始终在运行,实时监控和管理系统中可以被回收的资源

@Slf4j
public class ThreadTest {public static void main(String[] args) {log.info("main Start ...");Thread myThread1 = new MyThread1();myThread1.setName("测试线程");myThread1.setDaemon(true);myThread1.start();log.info("main End ...");}
}@Slf4j
class MyThread1 extends Thread{@Overridepublic void run() {log.info(Thread.currentThread().getName()+"   begin....");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}log.info(Thread.currentThread().getName()+"   end.....");}
}

在这里插入图片描述

3、并行和并发的区别

一个客观前提:一个CPU在某一时刻只能处理一个任务
并行:指在多核处理器下,每个cpu处理一个线程任务,形成了某一时刻物理上的多个线程同时进行
并发:指一个cpu快速切换处理多个线程任务,形成了用户状态上的多个线程同时进行,某一时刻物理上一个cpu仍旧只能处理一个线程。
在这里插入图片描述

4、CPU核数与并发数有关联吗?

物理上1 个cpu 某一时刻只能处理 1个线程,4核CPU最多可以同时跑4个线程(不考虑超线程),超线程技术简单理解为这个技术可以把1个CPU当成2个CPU用。

5、创建线程的几种方式 总结描述

  1. 继承 Thread 重写 run 方法;
  2. 实现 Runnable 接口,重写run 方法;
  3. 实现 Callable 接口 + Future 创建有返回值的线程。
  4. 线程池创建线程

6、线程池的了解 线程池学习

7、Java 中如何保证线程安全

  1. 使用线程安全的类。例如 package java.util.concurrent;
  2. 使用自动锁 synchronized synchronized 学习了解
  3. 自定义锁

8、Java 如何避免死锁问题

死锁的造成原因的必要条件是线程获取锁顺序不当

  1. 使用线程安全的类。例如 package java.util.concurrent;
  2. 避免使用多个锁,减少嵌套锁的使用
  3. 合理分配资源的使用顺序
  4. 使用定时锁,使用死锁检测工具

9、synchronized 和 volatile 的区别

  1. volatile 只能修饰变量;synchronized 可以修饰变量、方法、代码块、类
  2. volatile 原理是内存可见,每次访问变量时都从主存刷数据;synchronized 则是获取对象头的锁状态,进行加锁和解锁
  3. volatile 支持内存可见,不支持原子性(除了基本类型的简单操作,例如 ++ 或者 --),synchronized 支持内存可见,也通过锁支持了原子性
  4. volatile 不会造成线程阻塞问题,但是 synchronized 因为加锁可能造成线程阻塞问题

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

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

相关文章

通用文字识别OCR 之实现自动化办公

摘要 随着技术的发展,通用文字识别(OCR)已经成为现代办公环境中不可或缺的工具之一。OCR技术可以将印刷或手写文本转换为可编辑或可搜索的数字文本,极大地提高了办公效率并实现了自动化办公。本文将深入探讨OCR技术在实现自动化办…

NLP_文本去重_附Python实现【MinHash和MinHashLSH】算法

NLP_文本去重_附Python实现【MinHash和MinHashLSH】算法 前言代码的实现【注释丰富】 前言 大规模的文本去重是目前比较热门的一个技术,由于大模型的兴起,更多的高质量数据集也是大家迫切需要的。 关于如何进行文本去重? 直观的方法首先是利…

一百三十五、Azkaban——AzkabanWebServer服务开启后秒退

一、问题 Azkaban的AzkabanWebServer服务开启后秒退,造成Azkaban的页面登录不上 AzkabanWebServer服务开启后,第一个jps里面有AzkabanWebServer,随后第二个jps里面没有AzkabanWebServer 二、问题原因 MySQL中azkaban数据库的表executors的…

【ARMv8/v9 异常模型入门及渐进 13 -- ARM Linux 系统调用流程分析】

文章目录 1.1 SYSCALL 过程调用规范1.1.1 系统调用流程概括1.1.2 ARMv7 系统调用中断处理 上篇文章:ARMv8/v9 异常模型入门及渐进 12 – ARM Linux 用户栈和系统栈及 CURRENT宏 介绍 1.1 SYSCALL 过程调用规范 当进程因为中断或者系统调用陷入到内核态时&#xff0…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级…

遇到了一个存在XSS(存储型)漏洞的网站

第一个漏洞self xss(存储型) 存在漏洞的网站是https://www.kuangstudy.com/ 然后点击个人设置 在编辑主页中,我们可以用最简单的script语句进行注入,提交; 出现弹窗,说明它已经把代码进行解析&#x…

java8里如何使用流?《Java8 实战》读书笔记 第 5 章 使用流

目录 第 5 章 使用流5.1 筛选和切片5.1.1 用谓词筛选(filter)5.1.2 筛选各异的元素(distinct)5.1.3 截短流(limit)5.1.4 跳过元素(skip) 5.2 映射(map,fl…

JavaScript常见高级知识点

目录 防抖节流高阶函数函数柯里化数组去重set去重filter去重includes去重 数组扁平化深拷贝getBoundingCilentRectIntersectionObserver自定义事件 防抖 防抖是一种常用的技术手段,在JavaScript中特别常见。它的作用是控制某些高频率触发的事件,在一定时…

RocketMQ消息过滤Tag标签

生产者在封装Message消息时可以传入tag参数,消费者在进行消费时可以进行订阅主题时可以进行tag过滤,代码示例如下. //生产者 public class Producer {public static void main(String[] args) throws Exception{DefaultMQProducer producer new DefaultMQProducer(…

LLM - Chinese-Llama-2-7b 初体验

目录 一.引言 二.模型下载 三.快速测试 四.训练数据 五.总结 一.引言 自打 LLama-2 发布后就一直在等大佬们发布 LLama-2 的适配中文版,也是这几天蹲到了一版由 LinkSoul 发布的 Chinese-Llama-2-7b,其共发布了一个常规版本和一个 4-bit 的量化版本…

Linux命令行宝典:随时查询、轻松应对

🕺作者: 迷茫的启明星 学习路线C语言从0到1C初阶数据结构从0到1 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要&…

Ama no Jaku

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有一个n*n且仅由0和1构成的矩阵&#xff0c;每次操作可以将一整行或一整列的所有数取反&#xff0c;问能否使所有行中构成的最小数>所有列中构成的最大数 1<n<2000 思路&#xff1a;首先&#xff0c;如果…

H2TEST自动化测试

ref&#xff1a; GitHub - kunyi0605/H2testwpywinauto实战-操作h2testw.exe自动化测试脚本_肤白貌美的博客-CSDN博客 https://www.cnblogs.com/qican/p/15038067.html

Flink CEP (一)原理及概念

目录 1.Flink CEP 原理 2.Flink API开发 2.1 模式 pattern 2.2 模式 pattern属性 2.3 模式间的关系 1.Flink CEP 原理 Flink CEP内部是用NFA&#xff08;非确定有限自动机&#xff09;来实现的&#xff0c;由点和边组成的一个状态图&#xff0c;以一个初始状态作为起点&am…

文件共享服务器(五)sicis

目录 前言 一、概述 1.iscsi概念 2.iscsi介绍 3.相关名词 二、实验 1.构建iscsi服务 2.实现步骤 服务器端 客户端 3.注意事项 总结 前言 iSCSI是由IBM发明的基于以太网的存储协议&#xff0c;该协议与SUN的NFS协议都是为了解决存储资源共享问题的解决方案。两者意图…

git rebase -i

git rebase -i 是一种交互式的 rebase 方式&#xff0c;其中 -i 是 --interactive 的简写。这种方式允许你修改一系列的 commit 信息&#xff0c;在 rebase 过程中有选择地选择、编辑或者合并 commit。 在执行 git rebase -i 命令时&#xff0c;你需要提供一个参数&#xff0c…

音视频——封装格式原理

视频解码基础 一、封裝格式 ​ 我们播放的视频文件一般都是用一种封装格式封装起来的&#xff0c;封装格式的作用是什么呢&#xff1f;一般视频文件里不光有视频&#xff0c;还有音频&#xff0c;封装格式的作用就是把视频和音频打包起来。 所以我们先要解封装格式&#xff0…

集成学习Boosting - AdaBoost

目录 1. Boosting方法的基本思想 1.1 Bagging VS Boosting 1.2 Boosting算法的基本元素与基本流程 1.3 sklearn中的Boosting算法 2. AdaBoost 3 AdaBoost的基本参数与损失函数 3.1 参数 base_estimator&#xff0c;属性base_estimator_与estimators_ 3.1. 参数 learnin…

vue之vue-pboc组件

功能描述 PBOC业务页面基类组件,提供多个PBOC操作方法,,它的父级组件为vue-base #方法 查询电子现金余额及电子现金上限 queryElecBalance(); 查询电子现金明细 queryElecDetail(); pboc初始化过程接口 initDeviceInfo: function initDeviceInfo( appid, acctype, tranty…

用QFramework来重构 祖玛游戏

资料 Unity - 祖玛游戏 GitHub 说明 用QF一个场景就够了&#xff0c;在UIRoot下切换预制体达到面板切换。 但测试中当然要有一个直接跳到测试面板的 测试脚本&#xff0c;保留测试Scene&#xff08;不然初学者也不知道怎么恢复测试Scene&#xff09;&#xff0c;所以全文按S…