<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wei7a7a7a的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wei7a7a7a</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wei7a7a7a]]></copyright><item><title><![CDATA[多线程篇·线程相关知识]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143798768</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143798768</guid><author>wei7a7a7a</author><pubDate>Fri, 15 Nov 2024 14:42:26 +0800</pubDate><description><![CDATA[当多个线程同时扩容，由于 HashMap 非线程安全，若两个线程同时反转，可能形成链表循环（如 A 节点指向 B 节点，B 节点又指回 A 节点），这样下次获取 key 对应的 value 时，遍历链表会无法结束，从而导致 CPU 100%。若不采取任何措施，value 永远无法被 GC 回收，若线程长时间不销毁，可能产生内存泄漏。若被请求的共享资源被占用，则需要一套线程阻塞等待以及被唤醒时锁分配的机制，这个机制 AQS 是用 CLH（虚拟的双向队列）队列锁实现的，即将暂时获取不到锁的线程加入到队列中。]]></description><category></category></item><item><title><![CDATA[线程状态切换]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143796873</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143796873</guid><author>wei7a7a7a</author><pubDate>Fri, 15 Nov 2024 13:54:10 +0800</pubDate><description><![CDATA[【代码】线程状态切换。]]></description><category></category></item><item><title><![CDATA[在 Java 中，什么时候用重载，什么时候用重写]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143731817</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143731817</guid><author>wei7a7a7a</author><pubDate>Wed, 13 Nov 2024 10:17:22 +0800</pubDate><description><![CDATA[重载: 提供多种方法签名。目的是提高程序的多样性和健壮性，以适配不同场景使用时，使用重载进行扩展;重写: 增强剂，在不修改原方法的基础上增强或改变行为。重载必须修改方法的形参列表，返回值类型不能修改，访问权限也不能更严格。重写只能用于子类对父类方法的扩展或修改，不能抛出比父类方法声明的异常更多的异常。]]></description><category></category></item><item><title><![CDATA[ThreadLocal有哪些应用场景？它底层是如何实现的]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143714660</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143714660</guid><author>wei7a7a7a</author><pubDate>Tue, 12 Nov 2024 14:56:10 +0800</pubDate><description><![CDATA[3.用户会话或请求上下文：在Web应用中，可以使用ThreadLocal存储当前请求或会话的相关信息（如用户ID、权限信息等），使得在请求的生命周期内，任何地方都能方便地获取这些信息，而不会混淆不同用户的上下文。综上所述，ThreadLocal通过在每个线程中维护一个独立的存储空间，实现了线程间数据的隔离，是解决某些特定场景下线程安全问题的有效工具。5.线程安全的单例模式：在需要线程安全的单例对象时，可以通过ThreadLocal为每个线程提供单独的实例，避免多线程并发访问的同步问题。]]></description><category></category></item><item><title><![CDATA[为什么要使用克隆？如何实现对象克隆？深拷贝和浅拷贝区别是什么]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143713863</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143713863</guid><author>wei7a7a7a</author><pubDate>Tue, 12 Nov 2024 14:34:33 +0800</pubDate><description><![CDATA[有时需要复制一个对象，并且希望保留原有的对象进行接下来的操作。这时就需要使用克隆。]]></description><category></category></item><item><title><![CDATA[创建线程池有哪几种方式]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143708807</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143708807</guid><author>wei7a7a7a</author><pubDate>Tue, 12 Nov 2024 11:56:49 +0800</pubDate><description><![CDATA[​​：固定大小的线程池，适用于任务量已知且相对固定的场景，其背后使用的是无界的工作队列，任何时候最多有 nThreads 个工作线程是活动的。这意味着，如果任务数量超过了活动队列数目，将在工作队列中等待空闲线程出现；如果有工作线程退出，将会有新的工作线程被创建，以补足指定的数目 nThreads；​​：单线程的线程池，适用于需要按顺序执行任务的场景，操作一个无界的工作队列，所以它保证了所有任务的都是被顺序执行，最多会有一个任务处于活动状态，并且不允许使用者改动线程池实例，因此可以避免其改变线程数目；]]></description><category></category></item><item><title><![CDATA[JDK、JRE、JVM之间的区别]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143706468</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143706468</guid><author>wei7a7a7a</author><pubDate>Tue, 12 Nov 2024 11:14:45 +0800</pubDate><description><![CDATA[JDK指的运行时候的需要的一些工具类和运行时环境，比如包括javac.exe ,javadoxc.exe 一系列用于编译字节码工具 打包文档的工具。JVM指的是Java的虚拟机，Java程序需要运行在虚拟机上，不同的平台都有自己的虚拟机，所以Java语言实现了跨平台。JRE指的是Java的运行时环境，包括需要的大量的类库和Java的虚拟机。]]></description><category></category></item><item><title><![CDATA[谈谈ConcurrentHashMap的扩容机制]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143706074</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143706074</guid><author>wei7a7a7a</author><pubDate>Tue, 12 Nov 2024 11:08:09 +0800</pubDate><description><![CDATA[在Java8中，​​摒弃了分段锁的设计，转而采用更细粒度的锁，即每个桶（bin）上的链表头节点作为锁的粒度，并引入了红黑树来优化链表过长时的查找效率。其扩容过程主要包括以下几个步骤：1.初始化新容量：当需要扩容时，会计算出新的容量，并创建一个新的、容量更大的table。扩容的触发条件通常是当元素数量超过当前容量与负载因子乘积时。2.迁移节点：扩容的核心在于将旧table中的元素重新分配到新的table中。这个过程不是一次性完成的，而是随着每次对map的操作逐步进行。]]></description><category></category></item><item><title><![CDATA[重载和重写的区别]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143689070</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143689070</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 16:29:36 +0800</pubDate><description><![CDATA[5.重载：在同一个类中，当方法名相同，形参列表不同的时候  多个方法构成了重载，与修饰符无关，与返回值无关；1.定义：重载是在同一个类中定义多个具有相同名称但不同参数的方法；6.方法重写：父子类、接口和实现类之间的关系，子类可以重写父类方法，但是参数个数、类型、返回值必须相同。重写：参数列表必须要与被重写的相同；修饰符和抛出的异常不能在被重写的方法之外。重写是父类与子类的关系，是垂直关系；重载是同一个类方法中的关系，是水平关系。重载：必须有不同的参数列表；重写方法是子类对父类的方法进行重写。]]></description><category></category></item><item><title><![CDATA[多线程锁的升级原理是什么]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143688294</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143688294</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 16:08:53 +0800</pubDate><description><![CDATA[轻量级锁：轻量级锁是指当锁是偏向锁的时候，被第二个线程 B 所访问，此时偏向锁就会升级为轻量级锁，线程 B 会通过自旋的形式尝试获取锁，线程不会阻塞，从而提高性能。当一个线程已持有锁，另一个线程在自旋，而此时又有第三个线程来访时，轻量级锁也会升级为重量级锁。偏向锁的撤销：当有其他线程尝试竞争偏向锁时，偏向锁会被撤销，升级为轻量级锁。重量级锁：指当有一个线程获取锁之后，其余所有等待获取该锁的线程都会处于阻塞状态。锁的降级：JVM 并不支持锁的降级，即一旦锁升级为重量级锁，就不会再降级为轻量级锁或偏向锁。]]></description><category></category></item><item><title><![CDATA[创建线程有哪几种方式]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143687311</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143687311</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 15:37:22 +0800</pubDate><description><![CDATA[继承​​ Thread ​​​ 类：简单直观，适合初学者。实现​​​ 接口：灵活，解决单继承问题。实现​​​ 接口和​​：适合需要返回结果的任务。使用​​​ 框架：适合大规模并发任务的管理，提供高级功能。推荐使用 ​​Executor​​ 框架，因为它提供了更强大的功能和更好的性能。]]></description><category></category></item><item><title><![CDATA[线程池都有哪些状态]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686786</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686786</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 15:23:33 +0800</pubDate><description><![CDATA[4.TIDYING（整理状态）：当所有的任务（包括正在执行的和队列中的）都已完成，并且所有的worker线程（除了finalizer线程）都已经结束，线程池就会从SHUTDOWN或STOP状态转换到TIDYING状态。workCount 为 0。2.SHUTDOWN（关闭状态）当调用了线程池的`shutdown()`方法后，线程池进入此状态。1.RUNNING（运行状态）：在这个状态下，线程池可以接收新的任务提交，并且能够处理已添加到任务队列中的任务。这是线程池的初始状态，也是最活跃的状态。]]></description><category></category></item><item><title><![CDATA[hashCode()与equals()之间的关系]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686508</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686508</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 15:14:36 +0800</pubDate><description><![CDATA[在Java中，`hashCode()`和`equals()`方法之间存在紧密的关系，主要体现在它们共同作用于对象的比较和存储上，尤其是在集合（如HashSet、HashMap）和哈希表的实现中。4.HashCode和Equals都是在Object类中定义的，是对两个对象地址的比较，如果重写了Equals方法就必须重写HashCode方法。Equals返回的是true和false。1.hashCode()和equals()是Object类中定义的两个重要方法，用于对象的比较和哈希处理。]]></description><category></category></item><item><title><![CDATA[泛型中extends和super的区别]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686136</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143686136</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 15:06:13 +0800</pubDate><description><![CDATA[​ 用于确保可以安全地插入对象（即写入）。在实际应用中，根据你需要执行的操作（读或写）来决定使用哪一个。​ 关键字用于设置类型参数的上下界，控制可以传递给泛型类型的参数类型。​ 通常用于确保可以安全地使用对象的特性（即读取），而 ​。]]></description><category></category></item><item><title><![CDATA[String、StringBuffer、StringBuilder的区别]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143677819</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143677819</guid><author>wei7a7a7a</author><pubDate>Mon, 11 Nov 2024 11:58:33 +0800</pubDate><description><![CDATA[​对象，而原对象保持不变。-性能:由于每次修改都会创建新对象，因此在进行大量字符串操作时可能引起性能问题，尤其是在循环中连续拼接字符串 -线程安全: 因为字符串内容不可变，所以在多线程环境中不需要同步，天然线程安全。​的操作，比如拼接、替换等，都会返回一个新的​。​对象一旦被创建，其内容就不能改变。1.String: -不可变性:​。]]></description><category></category></item><item><title><![CDATA[==和equals方法的区别]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143643834</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143643834</guid><author>wei7a7a7a</author><pubDate>Sat, 09 Nov 2024 13:30:45 +0800</pubDate><description><![CDATA[在Java中，​​==​​​ 和 ​​equals​。]]></description><category></category></item><item><title><![CDATA[理解乐观锁和悲观锁]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143643615</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143643615</guid><author>wei7a7a7a</author><pubDate>Sat, 09 Nov 2024 13:11:09 +0800</pubDate><description><![CDATA[乐观锁：认为每次去拿数据的时候别人不会修改，所以不会上锁，但是每次要拿数据的时候都会先判断数据是否被别人修改悲观锁：认为每次去拿数据的时候别人都会修改，所以每次都会上锁。使用场景：乐观锁使用于多读少写的应用类型，这样可以提高吞吐量；相反的情况则使用悲观锁乐观锁和悲观锁是并发控制中两种常见的锁机制，它们分别基于不同的假设来处理数据的并发访问。]]></description><category></category></item><item><title><![CDATA[常用的 jvm 调优的参数都有哪些]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143642466</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143642466</guid><author>wei7a7a7a</author><pubDate>Sat, 09 Nov 2024 11:43:33 +0800</pubDate><description><![CDATA[【代码】常用的 jvm 调优的参数都有哪些。]]></description><category></category></item><item><title><![CDATA[java 中都有哪些引用类型]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143642003</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143642003</guid><author>wei7a7a7a</author><pubDate>Sat, 09 Nov 2024 11:17:27 +0800</pubDate><description><![CDATA[【代码】java 中都有哪些引用类型。]]></description><category></category></item><item><title><![CDATA[类加载的执行过程]]></title><link>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143641801</link><guid>https://blog.youkuaiyun.com/wei7a7a7a/article/details/143641801</guid><author>wei7a7a7a</author><pubDate>Sat, 09 Nov 2024 11:08:19 +0800</pubDate><description><![CDATA[类加载的执行过程是Java虚拟机（JVM）将类文件从磁盘加载到内存，并进行验证、准备、解析和初始化等一系列操作的过程。]]></description><category></category></item></channel></rss>