java
文章平均质量分 78
迷路国王
丰富有趣
展开
-
java线程池面试题----Executor框架解读实战
Executor 简介从代码上看,Executor 是一个简单的接口,但它却是整个异步任务执行框架的基础,这个框架能支持多种不同类型的任务执行策略。他提供了一种标准的方法将任务的提交过程和执行过程解耦开来,任务用 Runnable 来表示。Executor 基于生产者-消费者模式,提交任务的线程相当于生产者,执行任务的线程相当于消费者。同时,Executor 的实现还提供了对任务执行的生命周期管理的支持。Executor 引入的原因大多数并发应用程序都是围绕[任务执行]来构造,应用程序的工作可以被分.原创 2021-08-01 22:22:37 · 256 阅读 · 0 评论 -
java线程池面试题-----手写线程池实战
一、线程池实战例子项目背景:需要查出一百个用户的信息,并且给他们的邮箱发送邮件,打印出最终结果用户类public class User { private Integer id; private String email; public User(Integer id, String email) { this.id =id; this.email =email; } public String getEmail() {原创 2021-08-01 22:17:36 · 272 阅读 · 0 评论 -
java面试题---手写一个简单版的线程池
有些人可能对线程池比较陌生,并且更不熟悉线程池的工作原理。所以他们在使用线程的时候,多数情况下都是new Thread来实现多线程。但是,往往良好的多线程设计大多都是使用线程池来实现的。为什么要使用线程降低资源的消耗。降低线程创建和销毁的资源消耗。提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间提高线程的可管理性下图所示为线程池的实现原理:调用方不断向线程池中提交任务;线程池中有一组线程,不断地从队列中取任务,这是一个典型的生产者-消费者模型。要实现一个原创 2021-08-01 22:08:46 · 747 阅读 · 3 评论 -
java面试---线程池分析和线程的生命周期解读
面试必问:面试问题1:Java的线程池说一下,各个参数的作用,如何进行的? 面试问题2:按线程池内部机制,当提交新任务时,有哪些异常要考虑。面试问题3:线程池都有哪几种工作队列?面试问题4:使用无界队列的线程池会导致内存飙升吗? 面试问题5:说说几种常见的线程池及使用场景?线程池概念线程池: 简单理解,它就是一个管理线程的池子。它帮我们管理线程,避免增加创建线程和销毁线程的资源损耗。因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需转载 2021-07-31 18:34:29 · 1466 阅读 · 0 评论 -
java阻塞队列详解和并发队列的那些事
在之前的线程池的介绍中我们看到了很多阻塞队列,这篇文章我们主要来说说阻塞队列的事。 阻塞队列也就是 BlockingQueue ,这个类是一个接 口,同时继承了 Queue 接口,这两个接口都是在 JDK5 中加入的 。BlockingQueue 阻塞队列是线程安全的,在我们业务中是会经常频繁使用到的,如典型的生产者消费的场景,生产者只需要向队列中添加,而消费者负责从队列中获取。如上图展示,我们生产者线程不断的 put 元素到队列,而消费者从中 take 出元素处理,这样实现了任务与执行.原创 2021-07-31 16:26:14 · 210 阅读 · 1 评论 -
Java并发面试题 — 阻塞队列(BlockingQueue)
什么是阻塞队列阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作支持阻塞的插入和移除方法。支持阻塞的插入方法:当队列满时,队列会阻塞插入元素的线程,直到队列不满。支持阻塞的移除方法:当队列为空时,获取元素的线程会等待队列变为非空。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。在阻塞队列不可用时,这两个附加操作提供了4种处理方式,如下所示:抛出异常:原创 2021-07-31 10:25:26 · 708 阅读 · 0 评论 -
java线程面试题:原子操作类的正确使用实战
什么是原子操作原子的意思是说“不能被进一步分割的粒子”,而原子操作是说“不可被终端的一个或多个系列的操作”。假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么将B全部执行完,要么完全不执行B,那么A和B对彼此来说是原子的。java中可以通过锁,锁机制的方式来实现原子操作,但是有时候需要更有效灵活的机制,synchronized关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,访问同一资源的其它线程需要等待,直到该线程释放锁,因为synchronized关键字具有排他性,如原创 2021-07-30 13:56:38 · 189 阅读 · 0 评论 -
java线程面试题:CAS带来的三大问题及解决方案
1.ABA问题因为CAS需要在操作值的时候,检查值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么CAS进行检查的时候发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面加上版本号,每次变量更新的时候把版本号加1,那么A->B->A就会变成1A->2B->3A。从Java 1.5开始,JDK的Atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compare原创 2021-07-30 10:59:09 · 350 阅读 · 0 评论 -
Java线程面试题--------死磕 java线程系列之线程的生命周期
简介大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。常见的错误有:就绪状态、运行中状态(RUNNING)、死亡状态、中断状态、只有阻塞没有等待状态、流程图乱画等,最常见的错误就是说线程只有5种状态。今天这篇文章会彻底讲清楚线程的生命周期,并分析synchronized锁、基于AQS的锁中线程状态变化的逻辑。所以,对synchronized锁和AQS原理(源码)不了解的同学,请翻一下彤哥之前的文章先熟悉这两部分的内容,否则肯定记不住这里讲的线程生命周期。转载 2021-07-27 10:21:07 · 127 阅读 · 0 评论 -
Javah生成JNI头文件出现找不到类的错误(踩坑)
坑:在Android Studio上新建 NDK Javah生成JNI头文件出现找不到类的错误,通过命令生成.h头文件:javah -d …/jni -jni 包名.MyJni,一执行就说找不到类,翻build下的classes文件又能找到编译的类。跟着命令一步步的敲了的啊,我也十分确认没敲错或者敲漏,可为什么就遇到坑了啊o(╥﹏╥)o。其中参考: 使用Android Studio调用C++ 代...原创 2020-04-22 09:31:25 · 2227 阅读 · 1 评论 -
深入理解synchronized关键字
synchronized是如何实现同步的synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的。而锁的机制是如何实现同步的呢?这主要是因为锁的以下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确保在锁...原创 2020-04-19 14:10:34 · 161 阅读 · 0 评论 -
JVM锁优化总结
最近研究学习了Java1.6对锁的优化技术,重点就是偏向锁,轻量级锁。如下是几种锁之间的状态转换,清晰明了:结合网上学习的资料,总结了一下自己对锁优化的理解,只有自己把问题重述明白了,才是真正的掌握了知识。Jvm锁优化的原理synchronized在1.6之前完全依赖操作系统底层互斥量来完成同步操作,每次调用都需要程序由用户态进入内核态,然后内核态回到用户态,两种态之间的进入进出需要进行...原创 2020-04-11 09:26:20 · 139 阅读 · 0 评论