202205-30 一篇文章理解阻塞、非阻塞、同步、异步 目录理解阻塞、非阻塞、同步、异步阻塞非阻塞同步异步总结理解阻塞、非阻塞、同步、异步首先说明,这些都是在特点场景下或者相对情况的词汇,OK,接下来开门见山。阻塞可以很直观的理解,就如节假日高速路出口收费站一样,上图片:9个收费亭,同时来了一大波车,这时候同一时刻只能有9辆车在收费,剩下的车都在只能在后面排队等待,这就是现实中很直观的阻塞现象。这9个收费亭,就是一个瓶颈,或许画为这样更符合大家对瓶颈二字的... 继续阅读 >
202109-14 详解进程同步与互斥机制 目录一、什么是进程同步二、什么是进程互斥三、常见的进程同步与互斥机制一、什么是进程同步在多道批处理系统中,多个进程是可以并发执行的,但由于系统的资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。那么,进程的异步性会带来什么问题呢?举个例子,如果有A、B两个进程分别负责读和写数据的操作,这两个线程是相互合作、相互依赖的。那么写数据应该发生在读数据之前。... 继续阅读 >
202108-26 浅析从同步原语看非阻塞同步以及Java中的应用 目录一、从硬件原语上理解同步(非特指Java)1.1、基本硬件原语1.2、用一致性实现锁1.3、使用上面的旋转锁实现我们一个同步原语——栅栏同步二、Java中的原子性操作概述三、Java中的CAS操作概述3.1、模拟ABA问题3.2、使用AtomicStampedReference重新实现四、Java中的Unsafe类4.1、Unsafe类中的重要方法介绍4.2、Unsafe类的使用五、JUC中原子操作类AtomicLong的原理探究5.1、原操作类概述5.2、AtomicLong的源码一、从硬件原语上理解... 继续阅读 >
202108-06 详解JVM系列之对象的锁状态和同步 目录java对象头java中锁状态的变化偏向锁biasedlocking轻量级锁thinlock重量级锁三种锁状态的不同java对象头Java的锁状态其实可以分为三种,分别是偏向锁,轻量级锁和重量级锁。在JavaHotSpotVM中,每个对象前面都有一个class指针和一个MarkWord。MarkWord存储了哈希值以及分代年龄和标记位等,通过这些值的变化,JVM可以实现对java对象的不同程度的锁定。还记得我们之前分享java对象的那张图吗?javaObject对象的对象头大... 继续阅读 >
202105-23 Java中难理解的四个概念 前言Java是很多人一直在用的编程语言,但是有些Java概念是非常难以理解的,哪怕是一些多年的老手,对某些Java概念也存在一些混淆和困惑。所以,在这篇文章里,会介绍四个Java中最难理解的四个概念,去帮助开发者更清晰的理解这些概念:匿名内部类的用法多线程如何实现同步序列化匿名内部类匿名内部类又叫匿名类,它有点像局部类(LocalClass)或者内部类(InnerClass),只是匿名内部类没有名字,我们可以同... 继续阅读 >
202012-02 Springboot项目删除项目同步target文件问题解决方案 1.问题来源今天在做一个springboot的HelloWorld的web的项目,在我删除掉首页index.html后,重新编译,通过浏览器访问还是能访问到index.html页面。此项目是在idea下完成的。2.问题分析问题在于每次我们每次编译这个项目时,新增的文件会被编译进入target文件,而删除后的文件不会被编译进入target文件。3.解决问题解决的方法有两种第一种:直接删除target文件,重新编译就会重新生成一个已经删除index.htmld的target文... 继续阅读 >
202010-10 Java负载均衡服务器实现上传文件同步 负载服务器Z,应用服务器A和B,从A上传的附件,如何在B上下载下来?这个问题我的解决思路如下(后来被一个装逼的面试官给批评了这种做法,不过我瞧不起他)服务器A、B上传附件的时候,将这个附件备份到服务器Z,当A、B下载文件的时候,首先会在自己服务器的目录下寻找,如果找不到,就会从服务器Z上下载一份到当前服务器。服务器之间的文件备份通过sftp,参考:https://www.jb51.net/article/196008.htm(下文中的SftpCustom... 继续阅读 >
202010-09 如何使用CountDownLatch同步java多线程 最近写了一个并发幂等测试,用线程池加入多个线程,同时启动,领导觉得这样有一定的风险,要求更严格一点,把所有的线程加入池中,然后同时启动。本来有多种方法,因为我们需要从多个线程中获取返回值,所以我们用CountDownLatch来同步多线程。CyclicBarrier也是可以同步多线程的,但因为其无法获取返回值,最后只能选择CountDownLatch.因公司的代码不便共享,这里只提供一小部分代码。CountDownLatchlatch=newCountDownLatch(... 继续阅读 >
202010-09 基于logstash实现日志文件同步elasticsearch 引言:之前博文介绍过了mysql/oracle与ES之间的同步机制。而logstash最初始的日志同步功能还没有介绍。本文就logstash同步日志到ES做下详细解读。1、目的:将本地磁盘存储的日志文件同步(全量同步、实时增量同步)到ES中。2、源文件:[root@5b9dbaaa148atest_log]#ll-rwxrwxrwx1rootroot170Jul508:02logmachine.sh-rw-r--r--1rootroot66Jul508:25MProbe01.log-rw-r--r--1rootroot74Jul508:28MProbe02.l... 继续阅读 >
202010-08 Java异步调用转同步方法实例详解 先说一下对异步和同步的理解:同步调用:调用方在调用过程中,持续等待返回结果。异步调用:调用方在调用过程中,不直接等待返回结果,而是执行其他任务,结果返回形式通常为回调函数。其实,两者的区别还是很明显的,这里也不再细说,我们主要来说一下Java如何将异步调用转为同步。换句话说,就是需要在异步调用过程中,持续阻塞至获得调用结果。不卖关子,先列出五种方法,然后一一举例说明:使用wait和notify方法使用条件锁... 继续阅读 >
202009-24 Java实现多线程同步五种方法详解 一、为什么要线程同步因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0.那到底是哪个呢?很难说清楚。因此多线程同步就是要解... 继续阅读 >
202009-24 Java多线程synchronized同步方法详解 1、synchronized方法与锁对象线程锁的是对象。1)A线程先持有object对象的Lock锁,B线程可以以异步的方式调用object对象中的非synchronized类型的方法2)A线程先持有object对象的Lock锁,B线程如果在这时调用object对象中的synchronized类型的方法,则需要等待,也就是同步。2、脏读(DirtyRead)示例:publicclassDirtyReadTest{publicstaticvoidmain(String[]args){try{... 继续阅读 >
201411-07 Vagrant入门——同步文件及文件夹(Synced Folders) Whileitiscooltohaveavirtualmachinesoeasily,notmanypeoplewanttoeditfilesusingjustplainterminal-basededitorsoverSSH.LuckilywithVagrantyoudon'thaveto.Byusingsyncedfolders,Vagrantwillautomaticallysyncyourfilestoandfromtheguestmachine.Bydefault,Vagrantsharesyourprojectdirectory(remember,thatistheonewiththeVagrantfile)tothe/vagrantdirecto... 继续阅读 >