2024年6月25日

new String(“abc“)到底创建了几个对象?

摘要: new String(“abc“)到底创建了几个对象? 下面代码中创建了几个对象? new String("abc");答案众说纷纭,有说创建了1个对象,也有说创建了2个对象。答案对,也不对,关键是要学到问题底层的原理。 底层原理分析 String str1 = "abc"; // 在常量池中 St 阅读全文

posted @ 2024-06-25 16:59 myf008 阅读(120) 评论(0) 推荐(0) 编辑

Fail-safe机制与Fail-fast机制分别有什么作用

摘要: 「Java面试」Fail-safe机制与Fail-fast机制分别有什么作用 前段时间一个小伙伴去面试,遇到这样一个问题。 ”fail-safe机制与fail-fast机制分别有什么作用“ 他说他听到这个问题的时候,脑子里满脸问号。那么今天我们来看一下,关于这个问题,普通人和高手应该如何回答吧。 普 阅读全文

posted @ 2024-06-25 16:38 myf008 阅读(9) 评论(0) 推荐(0) 编辑

为什么HashMap的键值可以为null,而ConcurrentHashMap不行?

摘要: 为什么HashMap的键值可以为null,而ConcurrentHashMap不行? 写在开头 昨天在写《HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!》这篇文章的时候,漏了一个知识点,直到晚上吃饭的时候才突然想到,关于ConcurrentHashMap在存 阅读全文

posted @ 2024-06-25 16:24 myf008 阅读(115) 评论(0) 推荐(0) 编辑

java中当任务数量超过了线程池的数量时,如何让任务不进入队列?

摘要: java中当任务数量超过了线程池的数量时,如何让任务不进入队列? 如果任务数量超过了线程池的数量,而你不希望让任务进入队列,可以考虑使用一个不包含工作队列的线程池。在 Java 的 ThreadPoolExecutor 中,通过将工作队列设置为 SynchronousQueue 或者通过调用 Exe 阅读全文

posted @ 2024-06-25 16:17 myf008 阅读(37) 评论(0) 推荐(0) 编辑

阻塞队列被异步消费如何保证消费顺序

摘要: 阻塞队列被异步消费如何保证消费顺序 1. 阻塞队列的特性2. 维护的两个队列3. 阻塞队列的消费过程1. 阻塞队列的特性首先阻塞队列本身是一个符合FIFO特性的队列,也就是说存储进去的元素是符合先进先出的规则。 2. 维护的两个队列其次在阻塞队列里面,使用了一个condition条件等待来维护了两个 阅读全文

posted @ 2024-06-25 16:12 myf008 阅读(66) 评论(0) 推荐(0) 编辑

怎么判断线程池的任务是不是执行完了

摘要: 怎么判断线程池的任务是不是执行完了? 有几种方法: 1、使用线程池的原生函数isTerminated() executor提供一个原生函数isTerminated()来判断线程池中的任务是否全部完成。如果全部完成返回true,否则返回false。 2、使用重入锁,维持一个公共计数 所有的普通任务维持 阅读全文

posted @ 2024-06-25 13:41 myf008 阅读(259) 评论(0) 推荐(0) 编辑

AQS为什么使用双向队列

摘要: AQS(AbstractQueuedSynchronizer)使用双向链表的主要原因是为了实现等待队列(Wait Queue)。这个等待队列是用于管理在同步器上等待的线程,例如在获取锁时发现锁被占用,线程就会加入到等待队列中等待。 使用双向链表的优点包括: FIFO(先进先出)的顺序:双向链表可以保 阅读全文

posted @ 2024-06-25 13:39 myf008 阅读(172) 评论(0) 推荐(0) 编辑

线程池源码的几个问题

摘要: 面试官: 小伙子,我看你简历上写的项目中用到了线程池,你知道线程池是怎样实现复用线程的? 我: 线程池复用线程的逻辑很简单,就是在线程启动后,通过while死循环,不断从阻塞队列中拉取任务,从而达到了复用线程的目的。 具体源码如下: // 线程执行入口 public void run() { run 阅读全文

posted @ 2024-06-25 11:20 myf008 阅读(3) 评论(0) 推荐(0) 编辑

导航