当前位置: 首页 > news >正文

Java岗面试题--Java并发(日积月累,每日三题)

目录

  • 面试题一:并行和并发有什么区别?
  • 面试题二:线程和进程的区别?
    • 追问:守护线程是什么?
  • 面试题三:创建线程的几种方式?
      • 1. 继承 Thread 类创建线程,重写 run() 方法
      • 2. 实现 Runnable 接口创建线程,实现 run() 方法
    • 追问:Runnable 和 Callable 有什么区别?
      • 补充:FutureTask

面试题一:并行和并发有什么区别?

  1. 并行是指两个或者多个事件在同⼀时刻发⽣;而并发是指两个或多个事件在同⼀时间间隔发⽣;
  2. 并行是在不同实体上的多个事件,并发是在同⼀实体上的多个事件;
  3. 在⼀台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如 Hadoop 分布式集群。所以并发编程的目标是充分的利⽤处理器的每⼀个核,以达到最⾼的处理性能。

面试题二:线程和进程的区别?

进程:是程序运行和资源分配的基本单位,⼀个程序至少有⼀个进程,⼀个进程至少有⼀个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更⾼。

  • 举个例子,当我们双击桌面的图标时,系统会将对应的程序加载进内存,程序将会占用一部分内存用以执行操作。进入到内存的程序即为进程(一个应用程序可以同时运行多个进程)。当使用任务管理器关闭程序时(比如LOL),系统又会将程序从内存中清除,此时进程结束。如图:一个 LOL 进程。
    -在这里插入图片描述

线程:是进程的⼀个实体,是 cpu 调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同⼀进程中的多个线程之间可以并发执行。

需要注意的是,Java 本身并不能创造线程,因为线程其实是操作系统的一种资源,它由操作系统管理。我们一般说“Java 支持多线程”,指的就是 Java 可以调用系统资源创建多线程。
在这里插入图片描述

追问:守护线程是什么?

用户线程:我们平常创建的普通线程。
守护线程(即 Daemon thread),是个服务线程,用来服务于用户线程,准确地来说就是服务其他的线程。 在JVM中,所有非守护线程都执行完毕后,无论有没有守护线程,虚拟机都会自动退出。

守护线程怎么使用:使用很简单,只是在调用start()方法前,调用 setDaemon(true) 把该线程标记为守护线程。

  • 如何检查一个线程是守护线程还是用户线程:使用isDaemon()方法。
  • Java垃圾回收线程就是一个典型的守护线程,因为我们的垃圾回收是一个一直需要运行的机制,但是当没有用户线程的时候,也就不需要垃圾回收线程了,守护线程刚好满足这样的需求。

面试题三:创建线程的几种方式?

1. 继承 Thread 类创建线程,重写 run() 方法

public class ThreadDemo1 extends Thread {public static void main(String[] args) {// ThreadDemo 继承了Thread类,并重写run()ThreadDemo t = new ThreadDemo();// 开启线程:t线程得到CPU执行权后会执行run()中的代码t.start();}@Overridepublic void run() {System.out.println("Thread is running");}
}

2. 实现 Runnable 接口创建线程,实现 run() 方法

public class ThreadDemo2 implements Runnable{public static void main(String[] args) {// ThreadDemo2实现Runnable接口,并实现run()ThreadDemo2 target = new ThreadDemo2();// 调用Thread构造方法,传入TreadDemo2的实例对象,创建线程对象Thread t = new Thread(target);// 开启线程:t线程得到CPU执行权后会执行run()中的代码t.start();}public void run() {System.out.println("Thread is running");}
}
  1. 通过 Callable 和 Future 创建线程;
  2. 通过 线程池 创建线程。

追问:Runnable 和 Callable 有什么区别?

  1. Runnable 接口中的 run() 方法的返回值是 void,它做的事情只是纯粹地去执行 run() 方法中的代码而已; run方法不可以抛出异常。
  2. Callable 接口中的 call() 方法是有返回值的,是⼀个泛型,和 Future、FutureTask 配合可以用来获取异步执行的结果。call方法可以抛出异常。

补充:FutureTask

未来的任务,用它就干一件事,异步调用 main 方法就像一个冰糖葫芦,一个个方法由 main 串起来。
但解决不了一个问题:正常调用挂起堵塞问题。
例子:

  1. 老师上着课,口渴了,去买水不合适,讲课线程继续,我可以单起个线程找班长帮忙买水,水买回来了放桌上,我需要的时候再去get。
  2. 4个同学,A 算1+到20,B 算21+到30,C 算31*到40,D算41+到50,是不是 C 的计算量有点大啊,FutureTask 单起个线程给 C 计算,我先汇总 ABD,最后等 C 计算完了再汇总 C,拿到最终结果。
  3. 高考:会做的先做,不会的放在后面做 。

原理:在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给 Future 对象在后台完成,当主线程将来需要时,就可以通过 Future 对象获得后台作业的计算结果或者执行状态。 一般 FutureTask 多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。 仅在计算完成时才能检索结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。 只计算一次 get 方法放到最后。

public class CallableDemo {public static void main(String[] args) {FutureTask<Integer> futureTask = new FutureTask<Integer>(() -> {System.out.println(Thread.currentThread().getName() + "  come");return 1024;});new Thread(futureTask,"AAA").start();try {System.out.println(futureTask.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}
}运行结果:
AAA  come
1024

相关文章:

Java岗面试题--Java并发(日积月累,每日三题)

目录面试题一&#xff1a;并行和并发有什么区别&#xff1f;面试题二&#xff1a;线程和进程的区别&#xff1f;追问&#xff1a;守护线程是什么&#xff1f;面试题三&#xff1a;创建线程的几种方式&#xff1f;1. 继承 Thread 类创建线程&#xff0c;重写 run() 方法2. 实现 …...

Prometheus监控案例之blackbox-exporter

blackbox-exporter简介 blackbox-exporter项目地址&#xff1a;https://github.com/prometheus/blackbox_exporter blackbox-exporter是Prometheus官方提供的一个黑盒监控解决方案&#xff0c;可以通过HTTP、HTTPS、DNS、ICMP、TCP和gRPC方式对目标实例进行检测。可用于以下使…...

Makefile基础使用和实战详解

Makefile基础使用和实战详解一、基础1.1、简单的Makefile1.2、多文件编译1.3、伪对象.PHONY二、变量2.1、自动变量2.2、特殊变量2.3、变量的类别2.4、变量及其值的来源2.5、变量引用的高级功能2.6、override 指令三、模式四、函数4.1、addprefix 函数4.2、filter函数4.3、filte…...

Go基础-变量

文章目录1 Go中的变量2 声明一个变量3 声明变量并初始化4 变量推断5 声明多个变量5.1 多个变量相同类型5.2 多个变量不同类型6 简短声明7 Go语言变量不能把一种类型赋值给其他类型1 Go中的变量 Go中变量指定了某存储单元的名称&#xff0c;该存储单元会存储特定类型的值&#…...

【算法】三道算法题目单词拆分,填充每个节点的下一个右侧节点指针以及组合总和

算法第一道算法题&#xff1a;单词拆分java解答参考第二道算法题&#xff1a;填充每个节点的下一个右侧节点指针java 解答参考第三道算法题&#xff1a;组合总和java解答参考大家好&#xff0c;我是小冷。 今天还是继续学习算法技术知识吧 第一道算法题&#xff1a;单词拆分 …...

【算法】刷题路线(系统+全面)

本系列基于当前各大公司对大公司的考察情况&#xff0c;给大家规划一条可行的算法刷题路线&#xff0c;大概会规划 200 道自认为有用的题&#xff0c;并且争取让初学者&#xff0c;能够刷起来更加丝滑&#xff0c;而且每个阶段都会进行相对应的说明。 当然&#xff0c;无论是面…...

Fiddler的报文分析

目录 1.Statistics请求性能数据 2.检测器&#xff08;Inspectors&#xff09; 3.自定义响应&#xff08;AutoResponder&#xff09; 1.Statistics请求性能数据 报文分析&#xff1a; Request Count: 1 请求数&#xff0c;该session总共发的请求数 Bytes …...

Spring 中,有两个 id 相同的 bean,会报错吗

我们知道&#xff0c;spring容器里面的bean默认是单例的&#xff0c;所以id是唯一的。但是需要注意&#xff0c;同一类型的bean可以有不同的id&#xff0c;比如有id1->bean&#xff0c;也可以有id2->bean。 下面再来详细回答一下文章的问题。 首先&#xff0c;在同一个…...

Mysql数据库的时间(4)一查询数据库时间注意点

一.select根据时间段查询 1.原始的sql根据时间段查询 select * from stu where time between "1998-09-01" and "1999-09-01"; //查询从1998-09-01到1999-09-01时间段的数据 等同于select * from stu where time >"1998-09-01" and time &l…...

一起学 pixijs(2):修改图形属性

大家好&#xff0c;我是前端西瓜哥。 我们做动画、游戏、编辑器&#xff0c;需要根据用户的交互等操作&#xff0c;去实时地改变图形的属性&#xff0c;比如位置&#xff0c;颜色等信息。今天西瓜哥带大家来看看在 pixijs 怎么修改图形的属性。 因为 pixijs 的底层维护了图形…...

LeetCode 121. 买卖股票的最佳时机

原题链接 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给定一个数组 pricespricesprices &#xff0c;它的第 iii 个元素 prices[i]prices[i]prices[i] 表示一支给定股票第 iii 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同…...

shell脚本内调用另外一个shell脚本的几种方法

有时会在一个shell脚本(如test_call_other_shell.sh)中调用另外一个shell脚本(如parameter_usage.sh)&#xff0c;这里总结几种可行的方法&#xff0c;这些方法在linux上和windows上(通过Git Bash)均适用&#xff1a; 1.通过source: 运行在相同的进程&#xff0c;在test_…...

Linux C++ 多进程下write写日志问题思考

文章目录多个进程&#xff08;父子&#xff09;同时通过write像日志文件中写&#xff0c;是否会出现数据混乱情况&#xff1f;需要满足以下条件&#xff1a; 1、通过open打开文件&#xff0c;子进程都是复制父进程的文件描述符去操作这个文件&#xff0c;不会造成文件混乱&…...

MySQL的四种事务隔离级别

目录一、事务的基本要素&#xff08;ACID&#xff09;1、原子性&#xff08;Atomicity&#xff09;&#xff1a;2、一致性&#xff08;Consistency&#xff09;&#xff1a;3、隔离性&#xff08;Isolation&#xff09;&#xff1a;4、持久性&#xff08;Durability&#xff09…...

方法区和元空间有什么关系?

一.什么是方法区&#xff1f; 方法区属于是 JVM 运行时数据区域的一块逻辑区域&#xff0c;是各个线程共享的内存区域。 《Java 虚拟机规范》只是规定了有方法区这么个概念和它的作用&#xff0c;方法区到底要如何实现那就是虚拟机自己要考虑的事情了。也就是说&#xff0c;在…...

2023VNCTF的两道(暂时)

from http://v2ish1yan.top/2023/02/19/%E6%AF%94%E8%B5%9Bwp/2023vnctf/ 比赛的时候在回学校的路上&#xff0c;所以没有打&#xff0c;听说质量挺高&#xff0c;赛后做一下 象棋王子 一个普通的js游戏&#xff0c;玩过关了就给flag&#xff0c;所以flag肯定在前端源码里 这…...

JDK版本区别

1. 泛型 ArrayList listnew ArrayList()------>ArrayList<Integer>listnew ArrayList<Integer>(); 2 自动装箱/拆箱 nt ilist.get(0).parseInt();-------->int ilist.get(0);原始类型与对应的包装类不用显式转换 3 for-each i0;i<a.length;i------------&…...

Android 基础知识4-2.8 TableLayout(表格布局)详解

一、TableLayout的概述 表格布局是以行数和列数来确定位置进行排列。就像一间教室&#xff0c;确定好行数与列数就能让同学有序入座。 注意&#xff1a;我们需要先添加<TableRow容器&#xff0c;每添加一个就会多一行&#xff0c;然后再往<TableRow容器中添加其它组件。…...

SQL代码编码原则和规范

目录1、先了解MySQL的执行过程2、数据库常见规范3、所有表必须使用Innodb存储引擎4、每个Innodb表必须有个主键5、数据库和表的字符集统一使用UTF86、查询SQL尽量不要使用select *&#xff0c;而是具体字段7、避免在where子句中使用 or 来连接条件8、尽量使用数值替代字符串类型…...

【博客627】gobgp服务无损变更:graceful restart特性

gobgp服务无损变更&#xff1a;graceful restart特性 场景 当我们的bgp网关在对外宣告bgp路由的时候&#xff0c;如果我们网关有新的特性要发布&#xff0c;那么此时如果把网关停止再启动新版本&#xff0c;此时bgp路由会有短暂撤回再播出的过程&#xff0c;会有网络抖动 期待…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...