深圳幻海软件技术有限公司 欢迎您!

  • 怎么正确使用锁?

    锁的原理:任何时间都只能有一个线程持有锁,只有持有锁的线程才能访问被锁保护的资源。我们接下来看一下在锁的使用上有什么最佳实践。避免滥用锁如果能不用锁,就不用锁;如果你不确定是不是应该用锁,那也不要锁。使用锁后带来的代价:加锁和解锁过程都需要CPU时间的,这是一个性能的损失。使用锁还可能导致线程等待锁

  • 研究了一下Android JNI,有几个知识点不太懂

    本文转载自微信公众号「程序喵大人」,作者程序喵大人。转载本文请联系程序喵大人公众号。Java线程与Native(OS)线程的区别联系:Java线程其实是一层OS线程的封装,本质上就是OS线程。【以前版本的Java线程不是OS线程,是JVM构造的用户态线程(GreenThread),不能充分利用CPU

  • Mybatis-Plus解决公共字段快速填充,快速开发之一天1个小技巧

    痛点在开发中,如果有良好的开发规范,一般都会给表增加一些公共字段,比如创建时间,更新时间,用户ID,版本号等,代码里每次都要写上这些字段,能不能对这些公共字段进行统一处理,简化开发呢?解决方案持久层用mybatis-plus,然后实现MetaObjectHandler接口,便可以解决问题。具体步骤1

  • 多线程引发的惨案直接把年终给干没了

    你好,我是坤哥前些日子我们线上出现了一个比较严重的故障,这个故障是多线程使用不当引起的,挺有代表性的,所以分享给大家,希望能帮大家避坑。问题简述先简单介绍一下问题产生的背景,我们有个返利业务,其中有个搜索场景,这个场景是用户在app输入搜索关键词,然后server会根据这个关键词到各个平台(如淘宝,

  • 图解ReentrantReadWriteLock读写锁的实现原理

    概述ReentrantReadWriteLock读写锁是使用AQS的集大成者,用了独占模式和共享模式。本文和大家一起理解下ReentrantReadWriteLock读写锁的实现原理。原理概述上图是ReentrantReadWriteLock读写锁的类结构图:实现了ReadWriteLock接口,该

  • 为了带你精通 Java AQS,我画了 40 张图,从管程模型讲起!

    大家好,我是君哥。Java中AQS是AbstractQueuedSynchronizer类,AQS依赖FIFO队列来提供一个框架,这个框架用于实现锁以及锁相关的同步器,比如信号量、事件等。在AQS中,主要有两部分功能,一部分是操作state变量,第二部分是实现排队和阻塞机制。注意,AQS并没有实现任

  • MyBatisPlus联表查询短板有工具补齐了,微服务架构也可以优化了

    一、读写锁的介绍上一篇文章:《​​年底了我裁完兄弟自己也离职了,复习了Java锁的底层准备面试...​​》,聊了一下java并发包的公平锁和非公平锁。这篇文章来聊一下读写锁。所谓的读写锁,就是将一个锁拆分为读锁和写锁两个锁,然后你加锁的时候,可以加写锁,也可以加读锁。如下面代码所示:如果有一个线程加

  • 面试20K的职位必须要熟悉的Java线程池面试题

    一、背景引入今天跟大家聊一个互联网大厂的Java面试题:使用无界队列的线程池会导致内存飙升吗?因为在面互联网大厂的时候,一定会问并发,问并发的时候一定会问到线程池,问到线程池一定会问构造线程池的一些参数的含义。然后,有一些面试官会就线程池的具体场景,问一些可能会遇到的问题。所以,在这里就可能有上述那

  • 一文弄懂 Gunicorn 与 Python GIL

    什么是PythonGIL,它是如何工作的,以及它如何影响gunicorn。生产环境我应该选择哪种Gunicornworker类型?Python有一个全局锁(GIL),它只允许一个线程运行(即解释字节码)。在我看来,如果你想优化你的Python服务,理解Python如何处理并发是必不可少的。Pytho

  • 麻了,代码改成多线程,竟有九大问题

    前言很多时候,我们为了提升接口的性能,会把之前单线程同步执行的代码,改成多线程异步执行。比如:查询用户信息接口,需要返回用户基本信息、积分信息、成长值信息,而用户、积分和成长值,需要调用不同的接口获取数据。如果查询用户信息接口,同步调用三个接口获取数据,会非常耗时。这就非常有必要把三个接口调用,改成

  • 那些年你啃过的ConcurrentHashMap

    前言我是fancy,一个年纪轻轻bug量就累计到3200个的程序员,同事们都夸我一个人养活了整个测试组。最近迷上了并发编程。并发这玩意怎么说呢,就是你平时工作用不到,一用就用在面试上。这不,又卷起了并发容器。那说起并发容器,你一定也知道那几个,CopyOnWriteArrayList、并发队列Blo

  • 分布式锁工具:Redisson

    1.Redisson概述什么是Redisson?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-MemoryDataGrid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。Redisson的宗旨是促进使用者对Redis的关注分离(Separat

  • 面试官:CyclicBarrier有了解过吗?

    前言Java提供了一些非常好用的并发工具类,不需要我们重复造轮子,本节我们讲解CyclicBarrier,一起来看下吧~CyclicBarrier这个跟我们上节讲的CountDownLatch有点类似,从字面意思讲是相当于一个可循环的屏障,他与CountDownLatch不同的是它可以重复利用,下一

  • 一个测试记录:利用【分段锁】来处理并发情况下的资源竞争问题

    目录问题描述测试代码测试结果测试代码简介别人的经验,我们的阶梯!在开发中经常遇到多个并发执行的线程,需要对同一个资源进行访问,也就是发生资源竞争。在这种场景中,一般的做法就是加锁,通过锁机制对临界区进行保护,以达到资源独占的目的。这篇文章主要描述的就是使用分段锁来解决这个问题,说起来很简单:就是把锁

  • Java不支持协程?那是你不知道Quasar!

    在编程语言的这个圈子里,各种语言之间的对比似乎就一直就没有停过,像什么古早时期的"PHP是世界上最好的语言"就不提了,最近我在摸鱼的时候,看到不少文章都在说"Golang性能吊打Java"。作为一个写了好几年java的javaer,这我怎么能忍?于是在网上看了一些对比golang和java的文章,其

  • Java程序员必备基础结构图

    前言最近看了深入理解Java虚拟机第三版,整理了一些基础结构图,算是比较全的了,做一下笔记,大家一起学习。1.Java虚拟机运行时数据区图JVM内存结构是Java程序员必须掌握的基础。程序计数器程序计数器,可以看作当前线程所执行的字节码的行号指示器它是线程私有的。Java虚拟机栈线程私有的,生命周期

  • Go 为什么这么“快”

     本文主要介绍了Go程序为了实现极高的并发性能,其内部调度器的实现架构(G-P-M模型),以及为了最大限度利用计算资源,Go调度器是如何处理线程阻塞的场景。怎么让我们的系统更快随着信息技术的迅速发展,单台服务器处理能力越来越强,迫使编程模式由从前的串行模式升级到并发模型。并发模型包含IO多

  • 被开发者抛弃的 Executors,错在哪儿?

    一、序在Java领域内,我们使用多线程的方式来实现并发编程。而线程本身是操作系统的一个概念,虽然不同的语言对线程都进行了一些封装,但是最终都是调用到操作系统中去创建和调度线程。既然线程是一项重要的系统资源,为了更合理的利用此资源,我们会使用池化技术来优化线程的创建和销毁,这就是线程池。在我们学习并发

  • Java必备主流技术流程图,写得非常好!

     1.spring的生命周期Spring作为当前Java最流行、最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要; 首先容器启动后,对bean进行初始化按照bean的定义,注入属性检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bea

  • 干货分享:利用Java多线程技术导入数据到Elasticsearch

     前言近期接到一个任务,需要改造现有从mysql往Elasticsearch导入数据MTE(mysqlToEs)小工具,由于之前采用单线程导入,千亿数据需要两周左右的时间才能导入完成,导入效率非常低。所以楼主花了3天的时间,利用java线程池框架Executors中的FixedThread

推荐阅读