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

    Java 并发(7)CountDownLatch 源码分析

    这就是 CountDownLatch 的内部机制,看起来很简单,无非就是阻塞一部分线程让其在达到某个条件之后再执行。但是 CountDownLatch 的应用场景却比较广泛,只要你脑洞够大利用它就可以玩出各种花样。最常见的一个应用场景是开启多个线程同时执行某个任务,等到所有任务都执行完再统计汇总结果。下图动态演示了闭锁阻塞线程的整个过程。

    35610发布于 2020-04-07
  • 来自专栏技术杂货店

    java集合【7】-- List接口源码解析

    下面是List接口的继承关系: [20200314165852.png] 2.List接口的源码解析 继承于Collection接口,有顺序,取出的顺序与存入的顺序一致,有索引,可以根据索引获取数据 这个需要我们看源码里面的readOject()和writeOject()两个方法。其实就除了默认的序列化其他字段,这个elementData字段,还需要手动序列化和反序列化。 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ // 暂且来看看源码: private class Itr implements Iterator<E> { // 下一次调用next将返回的索引 int cursor 中文就是: 因为Java 5可以用更特定的返回类型(称为协变返回类型)重写方法。但是ListIterator是在Java 1.2中引入的。

    82400发布于 2020-11-21
  • 来自专栏陈琛的Redis文章

    Java源码系列(7):Java8的新特性

    ,不返回任何值(看起来像是返回void) (String s) -> System.out.print(s) 遍历list: 对平常的list进行输出打印,我们平常使用的是for循环遍历,但是在Java8 public class Java8 { public static void main(String args[]) { List<String> list = new ArrayList 稍微好一点的方法就是使用Arrays提供的sort方法,自己写一个comparator,作为匿名内部类,代码如下: public class Java8 { public static void main static int compareByAge(Person a, Person b){ return a.getAge()-b.getAge(); } } public class Java8 例子来了:在Java8的Iterable接口中添加了一个默认的方法forEach,也正是因为forEach是默认方法,才不用修改Iterable的所有实现类。

    53910发布于 2020-06-12
  • 来自专栏JavaEdge

    Java 集合源码解析 - ConcurrentHashMap(JDK7

    ConcurrentHashMap是线程安全且高效的HashMap 1 为什么要使用ConcurrentHashMap 线程不安全的HashMap HashMap是Java中最常用的一个Map类,性能好 return sun.misc.Hashing.stringHash32((String) k); } h ^= k.hashCode(); h += (h << 15) ^ 0xffffcd7d 来保护不同段的数据,在插入和获取元素时,先通过散列算法定位到Segment private static int hash(int h) { h += (h << 15) ^ 0xffffcd7d 之所以不会读到过期的值,是因为根据Java内存模型的happen before原则,对volatile字段的写操作先于读操作; 即使两个线程同时修改和获取volatile变量,get操作也能拿到最新的值 根据 Java 内存模型,对 同一个 volatile 变量的写 / 读操作可以确保:写线程写入的值,能够被之后未加锁的读线程“看到”。

    1K20编辑于 2022-11-30
  • 来自专栏技术杂货店

    java集合【7】——— List接口超级详细源码分析

    下面是List接口的继承关系: 2.List接口的源码解析 继承于Collection接口,有顺序,取出的顺序与存入的顺序一致,有索引,可以根据索引获取数据,允许存储重复的元素,可以放入为null的元素 这个需要我们看源码里面的readOject()和writeOject()两个方法。其实就除了默认的序列化其他字段,这个elementData字段,还需要手动序列化和反序列化。 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{ // 暂且来看看源码: private class Itr implements Iterator<E> { // 下一次调用next将返回的索引 int cursor 中文就是:因为Java 5可以用更特定的返回类型(称为协变返回类型)重写方法。但是ListIterator是在Java 1.2中引入的。

    75940编辑于 2022-02-15
  • 来自专栏Java架构师必看

    spring源码分析7

    spring源码分析7 强烈推介IDEA2020.2破解激活,IntelliJ 原文链接:https://gper.club/articles/7e7e7f7ff3g5agc4

    32030发布于 2021-04-13
  • 来自专栏爪哇缪斯

    源码解析:ThreadPoolExecutor(7

    五、源码解析—— getTask() getTask的代码逻辑并不复杂,关键注释我也已经写在源码上了,大家看一下就会理解的: 【解释】 在第二个红框处,我们就找到了keepAliveTime的身影 如下所示: ---- 六、源码解析—— reject(Runnable command) 最后关于拒绝策略这块,其实没什么好说了,最终调用的就是handler的rejectedExecution方法 而RejectedExecutionHandler handler的四个实现类,就如截图所示: ---- 七、结束语 到此,线程池的源码解析也就告一段落了。 ---- 八、附录:阅读源码所需的部分线程知识点 8.1> interrupt()、interrupted()和isInterrupted() public void interrupt() 其作用是中断此线程 ---- 源码解析:ThreadPoolExecutor (完)

    20210编辑于 2023-05-09
  • 来自专栏全栈程序员必看

    datax(7):JobContainer源码解读

    的大小 6、split()方法reader插件会根据channel的值进行拆分,但是有些reader插件可能不会参考channel的值,writer插件会完全根据reader的插件1:1进行返回 7、 TaskExecutor,通过taskExecutor.doStart()启动任务 三、主要方法 带do开头的方法,可以理解为具体实现类的执行 ---- 四、运行时序图 主入口为start方法 五、源码解读 * example: *

    * 前提条件: 切分后是1024个分表,假设用户要求总速率是1000M/s,每个channel的速率的3M/s, 每个taskGroup负责运行7个 /s / 3M/s = 333个,为平均分配,计算可知有308个每个channel有3个tasks,而有25个每个channel有4个tasks, * 需要的taskGroup数为:333 / 7 invoker = new HookInvoker(dir, configuration, comm.getCounter()); invoker.invokeAll(); } } 注: 对源码进行略微改动

    1.6K20编辑于 2022-08-29
  • golang源码分析 :gopls(7

    研究完mainCommands 的Serve命令后,我们看下剩下的其他命令 首先是version,用来输出版本信息

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

    golang源码分析:cayley(7)

    接着我们看下writer的实现,writer的核心源码位于writer/single.go,writer的注册方式和存储的注册类似,它注册了一个single的writer func init

    30220编辑于 2023-08-09
  • 来自专栏学习计划

    JDK 7 ConcurrentHashMap源码解读

    源码 它有这些个属性: // 默认初始大小 static final int DEFAULT_INITIAL_CAPACITY = 16; // 默认加载因子 static final

    48510发布于 2021-01-29
  • 来自专栏WebDeveloper

    源码安装PHP7

    /configure --prefix=/data/server/php7 #配置安装路径 make # 编译 make install # 安装 4. . ~/.bashrc fi # User specific environment and startup programs PATH=/server/php7/bin:$PATH export brew install gcc php环境找不到php.ini 1)在安装包目录下找到php.ini-devopment,将此文件拷贝到自己对应的安装目录,我自己这块是/data/server/php7/

    10.1K20发布于 2018-10-23
  • golang源码分析:langchaingo(7

    介绍完链式调用后,我们开始介绍RAG,RAG最核心的就是文本迁入,如何嵌入呢?首先我们要定义嵌入模型,然后进行文本的向量化,具体看下面的例子

    8710编辑于 2026-03-18
  • 来自专栏Postgresql源码分析

    Postgresql源码7)Xlog格式

    日志之间有链接关系,xl_prev指向上一条日志的起始位置,下一条日志的位置用xl_tot_len可以找到,日志之间形成“双向链表”。

    55110编辑于 2022-07-16
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析(7):chan

    if size&7 == 0 { off = round(off, 8) } else if size&3 == 0 { off = round(off, 4) } else if size&1 OK上述就是channel的源码分析,我们下面通过几张图来看一下chan的工作原理: send的流程: close的流程: 以上就是对 chan的底层操作原理及讲解。 问chan是否线程安全的呢?

    56110编辑于 2022-08-02
  • 来自专栏怀英的自我修炼

    Java漫谈7

    如果你初学编程,尤其是学Java,switch你是绕不过去的。而当你学习的时候,折腾你的可能还不是switch的定义,而是switch的语法,尤其是break的用法。 SWITCH 清单 Java中面对多个选择时可以直接使用switch,这样逻辑上简洁。 switch中break的用法是个坑,有它时,case执行完就跳出switch判断了。

    66680发布于 2018-03-12
  • 来自专栏晓晨的专栏

    CentOS 7 源码编译安装 Redis

    1.下载源码并解压 wget http://download.redis.io/releases/redis-4.0.10.tar.gz tar -xzf redis-4.0.10.tar.gz cd *) echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1 esac 7.

    1.6K10发布于 2018-08-02
  • 来自专栏java小白

    Jdk7HashMap源码分析

    二、HashMap的数据结构 我们知道在Java中最常用的两种结构是数组和模拟指针(引用),几乎所有的数据结构都可以利用这两种来组合实现,HashMap也是如此。 下面为HashMap构造函数的源码: //无参构造器 public HashMap() { //默认初始容量大小为16,默认的加载因子为0.75f this

    61350发布于 2018-05-24
  • 来自专栏程序员奇点

    Java ArrayList 源码

    Java ArrayList 源码 ArrayList 概述 ArrayList 是基于数组实现,是一个动态数组,容量可以自动增长,动态增加内存。

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

    Java扫雷源码

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

    1.3K40编辑于 2022-05-27
领券