首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏陈琛的Redis文章

    Java源码系列(4):String,StringBuilder,StringBuffer区别

    我们看出在25行地址是497,在27行地址是499,就说明Java首先创建一个String对象str,并把“abc”赋值给str,然后在27行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的 所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

    40520发布于 2020-06-12
  • 来自专栏拭心的安卓进阶之路

    并发编程4Java 阻塞队列源码分析(上)

    这篇文章我们来详细了解下 Java 中的阻塞队列究竟是什么。 什么是阻塞队列 阻塞队列其实就是生产者-消费者模型中的容器。 七种阻塞队列的前三种 Java 中提供了 7 种 BlockingQueue 的实现,在看线程池之前我根本搞不清楚究竟选择哪个,直到完整地对比总结以后,发现其实也没什么复杂。 不能保证同一优先级元素的顺序 这里就不再像前面那么详细地介绍源码了。 不了解 Comparator 和 Comparable 可以看这篇 Java 解惑:Comparable 和 Comparator 的区别。 经过源码分析我们了解了 PriorityBlockingQueue 为什么是无界、有优先级的队列了。因为它可以扩容,在添加、删除元素后都会进行排序。 由于篇幅原因,我们将阻塞队列分两篇介绍。

    1.7K90发布于 2018-01-05
  • 来自专栏狗哥的 Java 世界

    Java 并发(4)AbstractQueuedSynchronizer 源码分析之条件队列

    所以在本文中我只会细讲 await 方法和 signal 方法,其他方法不细讲但会贴出源码来以供大家参考。 1. reportInterruptAfterWait(interruptMode); } //返回剩余时间 return nanosTimeout - (System.nanoTime() - lastTime); } 4. //2.将头结点的后继结点引用置空 first.nextWaiter = null; //3.将头结点转移到同步队列, 转移完成后有可能唤醒线程 //4. = null); } 至此,我们整个的 AbstractQueuedSynchronizer 源码分析就结束了,相信通过这四篇的分析,大家能更好的掌握并理解 AQS。

    58720发布于 2020-03-24
  • 来自专栏Java架构师必看

    spring源码4

    spring源码4 强烈推介IDEA2020.2破解激活,IntelliJ IDEA

    29730发布于 2021-05-14
  • 来自专栏csdn_blog

    剑指Offer第4题详解(附Java、Python源码

    例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 2. 则切割后的左子树前序序列为:{2,4,7},切割后的左子树中序序列为:{4,7,2};切割后的右子树前序序列为:{3,5,6,8},切割后的右子树中序序列为:{5,3,8,6}。 (4)对子树分别使用同样的方法分解(使用递归较方便)。 3. 代码实现 3.1 Java 实现 1.先来棵树 class TreeNode { int value; TreeNode leftTree; TreeNode rightTree leftTree=" + leftTree + ", rightTree=" + rightTree + '}'; } } import java.util.Arrays

    54440发布于 2020-09-22
  • 来自专栏爪哇缪斯

    源码解析:ThreadLocal(4

    方法代码很少,源码和注释如下所示: 【解释】 removed如果为false,则可以理解为table数组里基本没有“陈旧”Entry。 2> 如果满足数组中存在的Entry数量 >= 3/4threshold,则进行resize()扩容操作。 源码和注释如下所示: 流程图如下所示: 3.9> expungeStaleEntries() 该方法内部比较简单,就是遍历table数组里的Entry,调用expungeStaleEntry方法(expungeStaleEntry 详情上面介绍了,这里就不再赘述了) 源码和注释如下所示: 3.10> resize() 扩容操作执行如下操作: 按照原table数组长度,创造长度为2倍的新table数组。 源码和注释如下所示: 四、ThreadLocal 内存溢出问题: 通过上面的分析,我们知道expungeStaleEntry() 方法是帮助垃圾回收的,根据源码,我们可以发现 get 和set 方法都可能触发清理方法

    25020编辑于 2023-05-09
  • 来自专栏Android点滴分享

    AudioRecord源码解读(4)

    源码介绍 线程运行流程 先看下RecordThread的创建: AudioFlinger::RecordThread::RecordThread(const sp<AudioFlinger>& audioFlinger 20 ms each; this ensures we can sleep for 20ms in RecordThread size_t pipeFramesP2 = roundup(4 native_stop(); mRecordingState = RECORDSTATE_STOPPED; } } 流程照样是从Java ; } if (javaAudioData == NULL) { ALOGE("Invalid Java array to store recorded audio") ; return (jint)AUDIO_JAVA_BAD_VALUE; } // NOTE: We may use GetPrimitiveArrayCritical

    2.2K10编辑于 2022-10-25
  • 来自专栏爪哇缪斯

    源码解析:ThreadPoolExecutor(4

    下面截图源码和注释就是ctl所包含的方法 针对ctl的值,其实是两部分组成的:【高3位】表示:线程池状态 + 【低29位】表示:线程池中线程数量,如下图所示: 【解释】 上图中的runState ---- 3.3> 线程池中的线程数量小于核心线程数代码逻辑 源码部分如下所示: 【解释】 其中的workerCountOf(c)用来获得当前线程池中的线程数,如果小于核心线程数,则直接调用 ---- 后面的内容,参见:源码解析:ThreadPoolExecutor(5)

    12710编辑于 2023-05-09
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析:boltdb(4)

    通过前面源码分析,我们差不多了解了boltdb的核心数据结构了,逻辑视图上是通过Bucket组建的嵌套结构来管理数据的,每一层都可以存储一一系列key和value,也是使用boltdb的用户需要关注的 若单个 page 大小不够,会分配多个 page ptr uintptr // 存放 page data 的起始地址 } ptr 是保存数据的起始地址,不同类型 page 保存的数据格式也不同,共有4

    42710编辑于 2023-09-06
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析(4):select

    那么select的实现在go的源码包runtime中,路径为:./src/runtime/select.go。 在for {} 结构中的 select 每一次for 都会经历上述的 4各阶段,创建 -> 注册 -> 执行 -> 释放;所以select的执行是有代价的而且代价不低。

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

    前面介绍了GenerateFromSinglePrompt和Call最终都调用了

    11110编辑于 2026-03-18
  • 来自专栏alexqdjay

    angularjs源码笔记(4)--scope

    $evalAsync 3.1 源码分析 $evalAsync用于延迟执行,源码如下: function(expr) { if (!$rootScope.$$phase && ! } } 传播路径: Root>[A>[a1,a2], B>[b1,b2>[c1,c2],b3]] Root > A > a1 > a2 > B > b1 > b2 > c1 > c2 > b3 4. $watchCollection 4.1 使用示例 $scope.names = ['igor', 'matias', 'misko', 'james']; $scope.dataCount = 4; $digest(); expect($scope.dataCount).toEqual(4); $scope.names.pop(); $scope. == newItem)) { changeDetected++; oldValue[i] = newItem; } } 4).

    1.5K30编辑于 2022-01-04
  • 来自专栏golang算法架构leetcode技术php

    kratos源码分析系列(4

    接着按目录分析源码: 5,encoding 支持的格式有form、json、proto、xml、yaml,使用的包有 https://github.com/go-playground

    70320编辑于 2023-03-14
  • 来自专栏吴伟祥

    Spring4 @Configuration源码

    . */ package org.springframework.context.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy ; import java.lang.annotation.Target; import org.springframework.beans.factory.annotation.Autowired; of {@code @Configuration} {@code Class} objects: *

     * @RunWith(SpringJUnit4ClassRunner.class

    70720发布于 2018-08-14
  • 来自专栏陈琛的Redis文章

    Java源码系列(4):String[]和List的区别及相互转换

    strings[0] = "a"; strings[1] = "b"; strings[2] = "c"; strings[3] = "d"; strings[4] strings[0] = "a"; strings[1] = "b"; strings[2] = "c"; strings[3] = "d"; strings[4]

    1.4K10发布于 2020-06-12
  • 来自专栏IT可乐

    Mybatis源码解析4——SqlSession

    ." + method, 1L); 直接看上面源码的第 76 行代码: List<T> list = this.selectList(statement, parameter); 在上一篇文章介绍 接着我们继续看 query() 方法: 看源码,也就是说先去查缓存,缓存命中了直接返回数据,没有命中就执行:delegate.query() 方法。 但是我们知道 Java对象参数和数据库参数是不一样的,那么肯定还会做参数类型转换,没错,就是通过下面将要介绍 TypeHandler 来完成。 3.4 TypeHandler 也就是将 Java 类型和 数据库类型进行互相转换。 Mybatis 提供给了很多内置的参数转换,基本上不需要我们自己去定义。 4、总结 这样,可乐就给大家完整的讲解了如何通过 SqlSession 进行一次数据库查询操作,但是正如文章开头所言,可乐给大家介绍了两种查询方式,一种是需要自己拼接 namespace+method

    75821发布于 2021-09-09
  • golang源码分析 :gopls(4

    初始化完转发代理,我们看看json-rpc服务提供能力是如何实现的

    8310编辑于 2026-03-18
  • 来自专栏程序员奇点

    Java ArrayList 源码

    Java ArrayList 源码 ArrayList 概述 ArrayList 是基于数组实现,是一个动态数组,容量可以自动增长,动态增加内存。 3、将数据后移 System.arraycopy(elementData, index, elementData, index + 1, size - index); // 4、 / Increments modCount // 3、尾部添加数据 System.arraycopy(a, 0, elementData, size, numNew); // 4、 ensureCapacityInternal(size + numNew); // Increments modCount int numMoved = size - index; // 4

    1.1K10发布于 2020-10-23
  • 来自专栏日志随记

    Java扫雷源码

    介绍:重写了一遍扫雷,代码更加规范,修复了一些小bug,优化了部分代码的算法,将各等级英雄榜独立

    1.3K40编辑于 2022-05-27
  • 来自专栏怀英的自我修炼

    Java漫谈4

    同样的,上述例子中的能量在Java中就对应了Java的数据类型,这些基本的数据类型就构成了Java的Bean,方法,函数等。 说回到Java的数据类型,Java中有8大数据类型,在我看来就像是8大金刚一样,它们分别是: boolean金刚:主判断,法宝为if尺,常用招数——if判断。 在每一台要运行java的机器上都装了虚拟机,虚拟机会根据每台机器做对字节码文件做快速处理,完成字节码到机器码的快速转换。 这一次,我们聊了Java中的八大数据类型,并且借用了8大金刚的概念来阐述它。希望这能让你对java的数据类型有个印象,咱们下回见。

    661100发布于 2018-03-12
领券