Netty锁事的五个关键点:

① 在意锁的对象和范围  --> 减少粒度

②  注意锁的对象本身大小   --> 减少空间占用

注意锁的速度 --> 提高速度

④不同场景选择不同的并发类 -->因需而边

⑤衡量好锁的价值 --> 能不用则不用

接下来按个看看:

①:在Netty的ServerBootstrap中的init():

上图不难看出来,多处使用了synchronized(){},而并非在inti方法上使用synchronized,如果这么做那么锁的对象就是这个实例,锁的范围则是大括号方法的范围,但是实际上我们不需要这么做,只是把Synchronized method -->Synchronized block,针对上图不同的属性,我们可以分别做锁,这样就减少了锁的范围。

②:例在ChannelOutboundBuffer中有这样的代码:

  

这个totalPendingSize是统计待发送的字节数

这样的两个步骤直接使用原子类就能完成,为什么不用原子类而是用了两个较为复杂的方式完成!这里可以参考https://www.cnblogs.com/-qilin/p/11725861.html

③例记录内存分配字节数等功能用到的LongCounter,在PlatformDependent的newLongCounter()中


上图的代码就是筛选jdk版本然后有不同的返回类型,如果大于等于8则是LongAdderCounter;而LongAdderCounter继承java.util.concurrent.atomic.LongAdder;

package io.netty.util.internal;

import java.util.concurrent.atomic.LongAdder;

final class LongAdderCounter extends LongAdder implements LongCounter {

    @Override
public long value() {
return longValue();
}
}

高并发时:java.util.concurrent.atomic.AtomicLong ->java.util.concurrent.atomic.LongAdder,特定场景下是优于AtomicLong ;

我只想做的更好,仅此而已

Netty的那些”锁”事的更多相关文章

  1. Java并发(九)【转载】不可不说的Java“锁”事

    转载自 美团技术团队,原文链接 不可不说的Java“锁”事 前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK ...

  2. 你用对锁了吗?浅谈 Java “锁” 事

    每个时代,都不会亏待会学习的人 大家好,我是yes. 本来打算继续写消息队列的东西的,但是最近在带新同事,发现新同事对于锁这方面有一些误解,所以今天就来谈谈"锁"事和 Java 中 ...

  3. 不可不说的Java“锁”事

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...

  4. Netty连接处理那些事

    编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等,针对高性能RPC,一般都是基 ...

  5. 透过“锁”事看InnoDB对并发的处理?

    一. 并发场景下的问题 相对于串行处理方式,并发的事务处理可显著提升数据库的事务吞吐量.提高资源利用率.在MySQL实际应用中,根据场景的不同,可以分为以下几类: 读读并发 读写并发 写写并发 在这些 ...

  6. Netty Pipeline与ChannelHandler那些事

    Pipeline和ChannelHandler是Netty处理流程的重要组成部分,ChannelHandler对应一个个业务处理器,Pipeline则是负责将各个ChannelHandler串起来的& ...

  7. 彻底搞懂 netty 线程模型

    编者注:Netty是Java领域有名的开源网络库,特点是高性能和高扩展性,因此很多流行的框架都是基于它来构建的,比如我们熟知的Dubbo.Rocketmq.Hadoop等.本文就netty线程模型展开 ...

  8. Netty中ByteBuf的引用计数线程安全的实现原理

    原文链接 Netty中ByteBuf的引用计数线程安全的实现原理 代码仓库地址 ByteBuf 实现了ReferenceCounted 接口,实现了引用计数接口,该接口的retain(int) 方法为 ...

  9. java 并发(六) --- 锁

          阅读前阅读以下参考资料,文章图片或代码部分来自与参考资料 概览 一张图了解一下java锁. 注 : 阻塞将会切换线程,切换内核态和用户态,是比较大的性能开销 各种锁 为什么要设置锁的等级 ...

随机推荐

  1. IVIEW组件Table中加入EChart柱状图

    展示图如下: 主要利用了render函数和updated()钩子函数进行数据填充与渲染. 1.在Table的Colums中加入 1 { 2 title: '比例图', 3 align: 'center ...

  2. ros中同时订阅两个topic(2张图像)合并成一个topic(1张图像)

    2019-12-06 15:42:39 先暂时做个资料保存 要同时用两个红外相机,但是没有做硬件上的 时间戳同步,就是笔记本上同时插着两个相机. 两个topic发布各自相机的图像,然后要有个节点同时订 ...

  3. vue-element-admin平时使用归纳

    message提示的使用 import { Message } from 'element-ui'; Message({ message: res.data.message || 'Error', t ...

  4. 小程序和vue的区别

    最近开发了一个比较完整的小程序项目,打算总结一下,小程序开发和vue开发的代码上的区别 1.小程序的路由写在app.json文件里,vue写在route.js里 2.小程序用 src="{{ ...

  5. 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)

    2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...

  6. matlab 计算灰度图像的一阶矩、二阶矩、三阶矩

    ​   一阶矩,定义了每个颜色分量的平均强度 ​  二阶矩,反映待测区域颜色方差,即不均匀性 ​  三阶矩,定义了颜色分量的偏斜度,即颜色的不对称性 close all;clear all;clc; ...

  7. Activity中使用PagerAdapter实现切换代码

    主活动 public class ViewPagerManager extends AppCompatActivity { private ViewPager viewPager; @Override ...

  8. ArcGIS Python获得一个图层所有线长

    import arcpy # Create an empty Geometry object # g = arcpy.Geometry() # Run the CopyFeatures tool, s ...

  9. vacode查看已安装的插件

  10. backbone之collection

    最近要用到backbone.js,网上也找了些资料,但是就看到一个开头还可以,往下看基本就看不下去了,幸好有这本书[LeanpubRead] Backbone.Marionette.js A Gent ...