p2p模块 p2p模块对外暴露了Server关键结构,帮助上层管理复杂的p2p网路,使其集中于Protocol的实现,只关注于数据的传输. Server使用discover模块,在指定的UDP端口管理网络中结点的发现以及维护,discover模块能够直接和临近结点交换各自已知结点信息,从而不断的更新结点网络. Server还是用nat模块来进行TCP端口映射,而nat主要是利用upnp和pmp两个协议,如果没有,那就只能认为指定的ip就是公网ip了. Server要同时在udp和tcp的3030…
dial.go阅读手记 dial.go是负责和peer建立连接关系的地方,主要是实现 type dialer interface { /* peers已经有的结点 */ newTasks(running int, peers map[discover.NodeID]*Peer, now time.Time) []task taskDone(task, time.Time) addStatic(*discover.Node) removeStatic(*discover.Node) } // di…
Spring5.0源码学习系列之浅谈BeanFactory创建过程 系列文章目录 提示:Spring源码学习专栏链接 @ 目录 系列文章目录 博客前言介绍 一.获取BeanFactory主流程 二.refreshBeanFactory创建过程 知识点归纳 博客前言介绍 提示:在上一章的学习中,我们简单了解了Spring IoC容器启动初始化的主流程,不过并没有详细解释,因为代码比较复杂,没有做长篇大论,所以本文接着学习BenFactory的创建过程,学习源码建议带着疑问去学,一点点跟,时间积累之…
目录 Java并发包源码学习系列:AQS共享模式获取与释放资源 独占式获取资源 void acquire(int arg) boolean acquireQueued(Node, int) 独占式释放资源 boolean release(int arg) void unparkSuccessor(Node node) 共享式获取资源 void acquireShared(int arg) void doAcquireShared(int arg) void setHeadAndPropagate…
目录 基本用法介绍 继承体系 构造方法 state状态表示 获取锁 void lock()方法 NonfairSync FairSync 公平与非公平策略的差异 void lockInterruptibly() boolean tryLock()方法 boolean tryLock(long timeout, TimeUnit unit) 释放锁 void unlock()方法 Condition实现生产者消费者 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueu…
目录 ReadWriteLock读写锁概述 读写锁案例 ReentrantReadWriteLock架构总览 Sync重要字段及内部类表示 写锁的获取 void lock() boolean writerShouldBlock() void lockInterruptibly() boolean tryLock() boolean tryLock(long timeout,TimeUnit unit) 写锁的释放 void unlock() 读锁的获取 void lock() boolean r…
目录 Condition接口 AQS条件变量的支持之ConditionObject内部类 回顾AQS中的Node void await() 添加到条件队列 Node addConditionWaiter() void unlinkCancelledWaiters() 完全释放独占锁 int fullyRelease(Node node) 等待进入阻塞队列 boolean isOnSyncQueue(Node node) boolean findNodeFromTail(Node node) vo…
目录 LockSupport概述 park与unpark相关方法 中断演示 blocker的作用 测试无blocker 测试带blocker JDK提供的demo 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与释放 Java并发包源码学习系列:AQS共享式与独占式获取与释放资源的区别 Java并发包源码学习系列:ReentrantLock可重入独占锁详解 Java并发包源码…
目录 为什么要使用ConcurrentHashMap? ConcurrentHashMap的结构特点 Java8之前 Java8之后 基本常量 重要成员变量 构造方法 tableSizeFor put方法存值 putVal initTable treeifyBin tryPresize transfer get方法取值 get 总结 参考阅读 系列传送门: Java并发包源码学习系列:AbstractQueuedSynchronizer Java并发包源码学习系列:CLH同步队列及同步资源获取与…
目录 本篇要点 什么是阻塞队列 阻塞队列提供的方法 阻塞队列的七种实现 TransferQueue和BlockingQueue的区别 1.ArrayBlockingQueue 2.LinkedBlockingQueue 3.PriorityBlockingQueue 4.DelayQueue 5.SynchronousQueue 6.LinkedTransferQueue 7.LinkedBlockingDeque 阻塞队列的实现机制 put方法 take方法 参考阅读 系列传送门: Java并…