求职学习笔记|并发编程知识点常见问题总结(一)

1. 什么是阻塞队列?阻塞队列的实现原理是什么?

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。
这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。

2. 什么是 Callable 和 Future?

Callable接口类似于 Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而 Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future 可以拿到异步执行任务的返回值。可以认为是带有回调的 Runnable
Future接口表示异步任务,是还没有完成的任务给出的未来结果。所以说 Callable 用于产生结果,Future 用于获取结果。

3. 什么是 FutureTask?

在 Java 并发程序中FutureTask表示一个可以取消的异步运算。它有启动和取消运算、查询运算是否完成和取回运算结果等方法。只有当运算完成的时候结果才能取回,如果运算尚未完成 get方法将会阻塞。一个FutureTask对象可以对调用了 CallableRunnable 的对象进行包装,由于FutureTask也是调用了 Runnable接口所以它可以提交给 Executor 来执行。

4. notify ()和 notifyAll ()有什么区别?

当一个线程进入 wait 之后,就必须等其他线程notify/notifyall,使用 notifyall,可以唤醒所有处于 wait 状态的线程,使其重新进入锁的争夺队列中,而 notify只能唤醒一个。
如果没把握,建议notifyAll,防止notify因为信号丢失而造成程序异常。

5. 什么是可重入锁( ReentrantLock )?谈谈它的实现

线程可以重复进入任何一个它已经拥有的锁所同步着的代码块,synchronized、ReentrantLock都是可重入的锁。在实现上,就是线程每次获取锁时判定如果获得锁的线程是它自己时,简单将计数器累积即可,每 释放一次锁,进行计数器累减,直到计算器归零,表示线程已经彻底释放锁。

6. 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。Java里面的同步原语synchronized关键字的实现是悲观锁。
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。在Java中原子变量类就是使用了乐观锁的一种实现方式 CAS 实现的。
乐观锁的实现方式:

使用版本标识来确定读到的数据与提交时的数据是否一致。提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。
java 中的 Compare and Swap 即 CAS ,当多个线程尝试使用 CAS 同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。Java开发交流君样:756584822

7. 什么是 CAS 操作,缺点是什么?

CAS 的基本思路就是,如果这个地址上的值和期望的值相等,则给其赋予新值,否则不做任何事儿,但是要返回原值是多少。每一个 CAS 操作过程都包含三个运算符:一个内存地址 V,一个期望的值 A 和一个新值 B,操作的时候如果这个地址上存放的值等于这个期望的值 A,则将地址上的值赋为新值 B,否则不做任何操作。
CAS 缺点

ABA 问题

比如说一个线程one从内存位置V中取出A,这时候另一个线程two也从内存中取出 A,并且two进行了一些操作变成了 B,然后 two又将V位置的数据变成A,这时候线程 one进行 CAS操作发现内存中仍然是 A然后one操作成功。尽管线程 one 的 CAS 操作成功,但可能存在潜藏的问题。从 Java1.5开始J DK 的 atomic包里提供了一个类 AtomicStampedReference 来解决 ABA 问题。
循环时间长开销大:
对于资源竞争严重(线程冲突严重)的情况,CAS自旋的概率会比较大,从而浪费更多的 CPU 资源,效率低于 synchronized

只能保证一个共享变量的原子操作:

当对一个共享变量执行操作时,我们可以使用循环 CAS 的方式来保证原子操作,但是对多个共享变量操作时,循环 CAS 就无法保证操作的原子性,这个时候就可以用锁。

8. SynchronizedMap 和 ConcurrentHashMap 有什么区别?

1. Executor框架是一个根据一组执行策略调用,调度,执行和控制的异步任务的框架。每次执行任务创建线程 new
Thread()比较消耗性能,创建一个线程是比较耗时、耗资源的。
2. 调用 new
Thread()创建的线程缺乏管理,而且可以无限制的创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗很多系统资源。

接使用 new Thread()启动的线程不利于扩展,比如定时执行、定期执行、定时定期执行、线程中断等都不便实现。

9. 在 Java 中 wait 和 sleep 方法的不同?

最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

10. 一个线程运行时发生异常会怎样?

如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候 JVM 会使用 Thread.getUncaughtExceptionHandler ( ) 来查询线程的UncaughtExceptionHandler并将线程和异常作为参数传递给handleruncaughtException()方法进行处理。

最后,祝大家早日学有所成,拿到满意offer

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

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

相关文章

实验——Windows常用网络测试命令

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1.Ipconfig该命令可以检查网络接口配置。如果用户系统不能到达远程主机&#xff0c;而同一系统的其他主机可以到达&#xff0c;那么用该命令对这种故障进行判断是有必要的。当主机…

Protel中的快捷键使用(网上资源)

Protel中的快捷键使用&#xff08;网上资源&#xff09; 使用快捷键之前&#xff0c;将输入法切换至中文&#xff08;中国&#xff09;状态 Enter——选取或启动 Esc——放弃或取消F1——启动在线帮助窗 Tab——启动浮动图件的属性窗口Page Up——放大…

为什么会有蟑螂这种反人类的动物出现?

全世界只有3.14 % 的人关注了青少年数学之旅相信很多人都听过南北蟑螂的故事&#xff0c;即使是一个可以打死老虎的北方人在南方蟑螂面前也会惊慌失措。除此之外&#xff0c;我们日常生活里和蟑螂的故事还有很多&#xff0c;比如&#xff1a;当你打开灯的时候&#xff0c;会有一…

Ajax使用初步

Ajax定义为“Asynchronous JavaScript XML”的简称&#xff0c;也就是异步的JavaScript和XML处理。从原理上看&#xff0c;主要是Ajax可以通过调用HttpRequest实现与服务器的异步通讯&#xff0c;并最终在网页中实现丰富友好的用户界面Ajax使用初步&#xff0c;配置步骤1.把Aj…

WPF 如何流畅地滚动ScrollViewer

WPF开发者QQ群&#xff1a; 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看&#xff0c;谢谢~。 前言看了看原生UWP的ScrollViewer&#xff0c;滑动很流畅(例如 开始菜单)&#xff0c;但是WPF自带的ScrollViewer滚动十分生硬..突发奇想&#x…

面试难点!常用算法技巧之“滑动窗口”

算法简介 滑动窗口&#xff0c;顾名思义&#xff0c;就是有一个大小可变的窗口&#xff0c;左右两端方向一致的向前滑动&#xff08;右端固定&#xff0c;左端滑动&#xff1b;左端固定&#xff0c;右端滑动&#xff09;。 可以想象成队列&#xff0c;一端在push元素&#xf…

回公司上班

回到公司上班了&#xff0c;悠闲的生活从此开始.....

10岁吊打职业教师的天才,仅用10篇论文称霸数学界160多年,40岁英年早逝却迄今无人超越...

全世界只有3.14 % 的人关注了青少年数学之旅今天超模君就给大家讲讲黎曼。人类历史上最伟大的数学天才的德国数学家是十九世纪数学界的巅峰——节选自《数学之旅 闪耀人类的54个数学家》1826年&#xff0c;黎曼作为家中的老二在德国汉诺威的布雷斯伦茨村出生了。他的父亲是村里…

NET问答: 如何集中化统一验证 Authorization

咨询区 Felipe Deveza&#xff1a;我自己实现了一个 basic 验证&#xff0c;现在我的做法是在每一个 Action 中都提取 Request.Headers["Authorization"] 进行权限验证。[HttpGet] public IActionResult Get() {string token Request.Headers["Authorization&q…

c#操作excel后关闭excel.exe的方法

C#和Asp.net下excel进程一被打开,有时就无法关闭, 尤其是website.对关闭该进程有过GC、release等方法&#xff0c;但这些方法并不是在所有情况下均适用。 于是提出了kill process的方法, 目前我见过的方法多是用进程创建时间筛选excel.exe进程, 然后kill 。 这样的…

22届腾讯暑期实习三轮面试面经(已oc)

投递岗位&#xff1a;IEG非工作室&#xff0c;java选手&#xff0c;岗位是C和go 3.6找同学内推 3.8一面&#xff1a;&#xff08;电话面试&#xff0c;45min&#xff09; 1、哈希表、concurentHashMap源码&#xff0c;扩容机制 2、多线程死锁、解决办法 3、线程池介绍一下&am…

AngularJS学习---REST和自定义服务(REST and Custom Services) ngResource step 11

1.切换目录 git checkout step-11 npm start 2.效果图 效果图和step 10的没有什么差别,这里主要的改动都是代码,代码做了很多优化,这里效果图就不再贴出来了. 3.实现代码 step-10和step-11之间的差别:https://github.com/angular/angular-phonecat/compare/step-10...step-11 D…

面试可以,但别打扰我睡觉! | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源科技九洲君&#xff0c;侵权删&#xff09;

使用网页对话框来显示图片 window.open()

这个主要用到了JS中的 window.open(url,windowname,location)url 目标窗口的url 如果url 是一个空字符串&#xff0c;浏览器将打开一个空白窗口windowname window对象名称location 窗口属性设置可选参数Default.aspx 页如下放置一个linkbutton,并写下事件处理protected void L…

基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part3-presenters-views-and-controllers/在本文中&#xff0c;我将实现Presentation(展示层)。这里的展示层不是指用户界面而是Web API。也可以在实现展示层之前先实现r…

hashtable与HashMap区别

看到了很多的面试题集里都有这么一个题:HashMap和Hashtable的区别,自己也看了好几遍了,总是不记得,写下来当是一次笔记吧. 区别一它们的父类不同 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializabl…

牛逼!不得不服,第一次有人把Java 反射机制讲解这么透!

反射概述 什么是反射 将类的各个组成部分封装为其他对象的过程就叫做 反射&#xff0c;其中 组成部分 指的是我们类的 成员变量&#xff08;Field&#xff09;、构造方法&#xff08;Constructor&#xff09;、成员方法&#xff08;Method&#xff09;。 使用反射的优缺点 …

拿破仑最欣赏的数学家,师从拉格朗日,撕逼泊松,一生痴迷热学最后却死于热学...

全世界只有3.14 % 的人关注了 青少年数学之旅 这几天&#xff0c;终于变凉了&#xff0c;超模君再也不用被热死了。 但炎热夏日的离去&#xff0c;也让超模君想起了那个和热脱不了关系的数学家——傅里叶。 “对自然界的深入研究是数学发现最丰富的源泉” ——节选自 《数学之旅…

Mysql ID重新排列

我们经常会遇到&#xff0c;在删除数据库某条记录时&#xff0c;原来的ID排序会有间隔&#xff0c;比如删除了ID为8的数据,这个表的ID排序就会从7直接到9, 那我们如何解决这个ID重新排列的问题呢? 只需一下三步: 1.删除这个表的ID ALTER TABLE table_name DROP id; 2.重新建立…

java基础进阶(文件列表,线程,线程组)编程实例(4篇)

此处刊登代码均测试通过&#xff0c;完全准确&#xff01; import java.io.*; public class DirList{ public static void main(String[] args){ try{ File pathnew File("."); /*“.”指当前目录*/ String[] list; if(args.length0) listpath.list();/*列出当前文件…