首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏狗哥的 Java 世界

    Java 并发(9)ConcurrentHashMap 源码分析

    Java 为我们提供了一个现成的哈希结构,那就是 HashMap 类,在前面的文章中我曾经介绍过 HashMap 类,知道它的所有方法都未进行同步,因此在多线程环境中是不安全的。 为此,Java 为我们提供了另外一个 HashTable 类,它对于多线程同步的处理非常简单粗暴,那就是在 HashMap 的基础上对其所有方法都使用 synchronized 关键字进行加锁。 这里拿 CAS 操作进行分析,还是老套路,首先根据 key 的哈希码找到对应的分段锁,然后调用它的 replace 方法。 9. 自旋时具体做了些什么? 这两种自旋方法大致是相同的,这里我们只分析 scanAndLockForPut 方法。

    85910发布于 2020-04-15
  • 来自专栏Java架构师必看

    spring源码分析9

    spring源码分析9 强烈推介IDEA2020.2破解激活,IntelliJ

    43220发布于 2021-04-13
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析9)调度

    不同于Python基于进程的并发模型,以及C++、Java等基于线程的并发模型。Golang采用轻量级的goroutine来实现并发,可以大大减少CPU的切换。 现在已经有太多的文章来介绍goroutine的用法,在这里,我们从源码的角度来看看其内部实现。

    55720编辑于 2022-08-02
  • golang源码分析:langchaingo(9

    前面介绍了单独的匹配,如果把这个匹配过程接入到LLM,就是完整的RAG,即检索增强生成。我们先看看上一个例子还没介绍的最后几行代码

    6410编辑于 2026-03-18
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析:cayley(9)

    中间使用到了goja解析器,它的作用是在golang环境中翻译执行javascript,因为我们的gizmo采用的是javascript语法。

    34620编辑于 2023-08-09
  • golang源码分析 :gopls(9

    最后我们来到了第三部分featureCommands,也是所有命令的大头,这里一共初始化了23个命令。我们首先看下第一个callHierarchy

    10610编辑于 2026-03-18
  • 来自专栏码农知识点

    zookeeper源码分析(9)-Curator相关介绍

    zookeeper常用的Java客户端有三种:zookeeper原生的、Apache Curator、开源的zkclient。Curator官网上这么说 ? 如果客户端watcher注册过多,那么可能就会导致重连之后watch丢失(重连会清空sendThread的发送和接收队列,可能会导致watch丢失),甚至重连不成功(本文分析的版本3.1.0中只要调用client.getZooKeeper 分布式锁 类似于Java的j.u.c包中的锁,recipes提供了分布式协调下(不同JVM)的互斥锁(可重入/不可重入),可重入读写锁,信号量和多锁对象。 在分析之前先知道下文中watch的作用: 在节点上注册的watch主要做的事情是:1.当节点被删除或创建时,唤醒注册watch的线程。2。 参考资料: ZooKeeper的Java客户端使用 跟着实例学习ZooKeeper的用法: 文章汇总 Zookeeper Client架构分析——ZK链接重连失败排查 http://zookeeper.apache.org

    2.6K30发布于 2020-06-22
  • 来自专栏技术杂货店

    java集合【9】-- Vector接口源码解析

    同样继承AbstractList,实现了List,RandomAcess,Cloneable, java.io.Serializable接口。 [20201105233415.png] 定义源码如下: public class Vector<E> extends AbstractList<E> implements List<E >, RandomAccess, Cloneable, java.io.Serializable{ } 2. 这是一个传统的类,但它在Java 2中被完全重新设计。 s) throws java.io.IOException { final java.io.ObjectOutputStream.PutField fields

    68100发布于 2020-11-22
  • 来自专栏二进制文集

    Java LinkedHashMap 源码分析

    分析 内部结构 LinkedHashMap继承自HashMap,内部额外维护了一个Entry的双向链表,用于记录访问和插入顺序。

    61930发布于 2019-02-25
  • 来自专栏程序员奇点

    Java String 源码分析

    Java String 源码分析 定义 Java 8 中 String 源码 public final class String implements java.io.Serializable String 是final 类型不能被继承,同时实现了 java.io.serializable Comparable charSequence 三个接口。 static final long serialVersionUID = -6849794470754667710L; String 实现了 Serializable 接口,支持序列化和反序列化支持,Java 使用字节数组来构建 String Java 中,String 实例中报错一个字符数组,char[] 字符数组时以 unicode 码来存储的。 Java 8 中采用的是 Array.copy 方法,避免了这个问题 public String(char value[], int offset, int count) { if (offset

    55810发布于 2020-10-23
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 image 源码结构 Stream 相关类和接口的继承关系如下图所示: ? image 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。 分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。 image 分析,对于复杂的归约操作: Stream API的性能普遍好于外部手动迭代,并行Stream效果更佳; 再来考察并行度对并行效果的影响,测试结果如下: ?

    59241发布于 2020-12-08
  • 来自专栏大数据学习笔记

    Java HashSet源码分析

    1、源码分析 废话不多说,直接上代码,相关解释请参见注释 package java.util; /** * * @param <E> the type of elements maintained HashMap * @since 1.2 */ public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable s) throws java.io.IOException { // Write out any hidden serialization magic s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden serialization 通过源码可知,HashSet实际上由HashMap支持实现。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。

    35510编辑于 2022-05-06
  • 来自专栏二进制文集

    Java Stream 源码分析

    前言 Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。 操作分类详情如下图所示: [2020-12-03-030958.jpg] 源码结构 Stream 相关类和接口的继承关系如下图所示: [2020-12-03-031525.jpg] BaseStream [2020-12-03-033401.png] 操作叠加 Stream 的基础用法就不再叙述了,这里从一段代码开始,分析 Stream 的工作原理。 java.util.stream.StreamSupport#stream(java.util.Spliterator<T>, boolean) public static <T> Stream<T> 分析如下: 对于基本类型Stream串行迭代的性能开销明显高于外部迭代开销(两倍); Stream并行迭代的性能比串行迭代和外部迭代都好。

    3.4K53发布于 2020-12-03
  • 来自专栏全栈程序员必看

    Java volatile源码分析

    而针对volatile修饰的变量给java虚拟机特殊的约定,线程对volatile 变量的修改会立刻被其他线程所感知,即不会出现数据脏读,从而保证数据的一个可见性。 volatile 特性分析 特性一:可见性 前面介绍Java内存模型的时候,我们说过可见性是指当一个线程修改了共享变量的值,其他线程立即感知到这种变化。 特性二、禁止重排序 前面介绍Java 内存模型的时候,我们说过java中的有序性可以概况为一句话:如果在本线程中观察,所有的操作都是有序的;如果在另外一个线程中观察,所有的操作都是无序的。

    35150编辑于 2022-09-09
  • 来自专栏wannshan(javaer,RPC)

    java ThreadLocal 分析by 源码

    可以,通过inheritableThreadLocals属性子线程可以继承父线程的local变量,具体通过InheritableThreadLocal

    49730发布于 2021-03-18
  • 来自专栏后端Coder

    java进阶|java队列源码分析

    今天我要分享的是java里面比较常见的数据结构队列的源码分析,队列,先进先出模式,即FIFO的特点,日常生活中队列的特点也随处可见,超市购物排队,餐厅排队买饭等一系列都满足了队列的先进先出的特点,java 也不是,主要是之前我自己分析了ArrayList,LinkedList以及Stack的源码文章了,到这里就理所应当的应该分析队列的这种数据结构了,满足一下学生时代心心念的数据结构吧。 说了这么多,接下来就逐渐去分析队列的源码吧,写到这时下起了小雨,对,这个时间段是晚上十点左右,这篇文章是自己继五一放假来的第一篇文章,自己玩着玩着手机就突然想起了要写这篇文章了,索性就过来写了,要是学生时代这么努力多好 关于读源码,如何进行梳理整个过程,每个人都有着自己的一套,在这里我就以自己的一套来进行分析好了。 十,到这里就结束了自己对队列的源码分析,其实你会发现我这里没有对队列的每一个方法进行分析,其实都差不多,这里起到一个开头作用就可以了,下面的每个分析方法都差不多。

    97820发布于 2020-05-26
  • 来自专栏后端Coder

    java进阶|PriorityQueue源码分析

    0x01,闲聊一下 本来今天(2020/06/xx)是打算分析一下ArrayBlockingQueue队列的源码的,但是看了半个多小时吧,还有一点没有想明白,索性就没有继续以文章的方式输出了,但是看了ArrayBlockingQueue 的源码,倒是觉得它就是一个线程安全的队列,所以后面打算分享一下吧,谁让当时理解不了那个知识点呢,后面再说了,后面自己就写了java的等待通知机制的文章和限流的文章,所以这是今天写的第三篇文章了,好了,好了 ,不闲扯了,这里我就来分析了优先级队列的源码,因为我理解了里面的内容,不写出来总觉得没有掌握这个内容,其实也不是,可能是写文章写多了,不写总觉得不习惯,是的,不习惯。 0x02,步入主题 一般,我在分析源码的时候总是从构造函数入手,想起构造函数还是想起了要写一篇如何创建java对象的文章吗,不知道,还是在自己的内心沉淀一段时间再说吧,毕竟写文章是需要很花费一个人很长的时间的 ,这是第15篇源码分析的文章,最近也在思考一下这两年的点点滴滴,如果自己有时间以及自己如果思考的有意义的话语,自己会单独写一篇这两年的点点滴滴分享一下,或许对于自己也是一个总结。

    42520发布于 2020-07-02
  • 来自专栏后端Coder

    java之CopyOnWriteArraySet源码分析

    上篇我们分享了CopyOnWriteArrayList的源码分析,这次我们打算来分享 CopyOnWriteArraySet的源码分析,当自己整理了一下源码流程时发现这篇文章没什么写头,底层是在基于利用 package com.wpw.asyncthreadpool; import java.util.concurrent.CopyOnWriteArraySet; public class CopyOnWriteArraySetTest 我们看下在CopyOnWriteArrayList源码里面我们没有介绍到的containsAll()方法,由于这篇讲的是set,但是底层还是使用的是CopyOnWriteArrayList,所以我们这里继续分析 destPos, int length); 我们看上面的方法修饰符是由native关键字修饰的,所以它是在本地方法栈执行的,不是在java 到这里我们的分享内容就结束了,今天写了CopyOnWriteArrayList的姊妹篇 CopyOnWriteArraySet的源码分析,其实底层实现是基于CopyOnWriteArrayList的,喜欢文章的可以关注公众号

    60320发布于 2019-11-05
  • 来自专栏后端Coder

    java之StopWatch源码分析

    这时我们就用到了java常用的计时方式之一了,System.currentTime()方法在方法的前后计算时间差。配上代码的方式我们来看下。 System.out.println("统计计算0~1000000000相加的总和" + sum + "耗时时间为:" + (endTime - startTime) + "ms");     } 我们先分析这段代码涉及的内容吧 public static native long currentTimeMillis(); 上面的方法使用native关键字进行标识,这不是一个java方法,而是一个本地方法,本地方法是运行在本地方法栈的 想了解本地方法栈和java方法栈的内容可以先看下这两篇文章java虚拟机,应该了解一点点,另外一篇是java内存区域划分详解,后面的一篇是对前面内容的详细描述吧,希望可以帮助到你,喜欢的可以关注此公众号 下面再分析一下这个方法了,在我们的示例中,我们使用了下面的这个方法prettyPrint()进行信息格式友好的输出。

    1.1K10发布于 2019-10-24
  • 来自专栏johnhuster

    java stream distinct源码分析

    return this.name.equals(((A) obj).getName()); } } 输出结果如下: hello world 具体为什么会有上述结果呢,让我们来看下DistinctOps源码 } } }; } } }; } 上面标浅蓝色部分就是原因,即java

    46610编辑于 2022-03-28
领券