摘要:
前言 之前分析的ReentrantLock以及Synchronized都是排他锁,同一时间只允许一个线程进行资源的访问,但是有时需要允许多线程对资源进行读访问,而不允许多线程对资源写访问时,ReentrantLock和Synchronzied很显然就无法实现,好在JUC中已经实现了,就是本文需要分析 阅读全文
摘要:
前言: JUC中提供了很多同步工具类,比如CountDownLatch、CyclicBarrier、Semaphore等,都可以作用同步手段来实现多线程之间的同步效果 一、CountDownLatch 1.1、CountDownLatch的使用 CountDownLatch可以理解为是同步计数器,作 阅读全文
摘要:
前言 ReentrantLock是JUC提供的可重入锁的实现,用法上几乎等同于Synchronized,但是ReentrantLock在功能的丰富性上要比Synchronized要强大。 一、ReentrantLock的使用 ReentrantLock实现了JUC中的Lock接口,Lock接口定义了 阅读全文
摘要:
一、过滤器(Filter)简介 过滤器是对web资源进行拦截,做一些处理后再交给下一个过滤器或Servlet处理,主要可以拦截request和response 过滤器是以一种组件的形式与web程序绑定,采用链式进行工作。 过滤器的好处: 可以拦截请求和响应,以便查看或者获取客户端与服务器之间的交互数 阅读全文
摘要:
一、什么是序列化和反序列化? 序列化:将对象状态信息转化成可以存储或传输的形式的过程(Java中就是将对象转化成字节序列的过程) 反序列化:从存储文件中恢复对象的过程(Java中就是通过字节序列转化成对象的过程) 二、为什么要序列化和反序列化? Java中对象都是存储在内存中,准确地说是JVM的堆或 阅读全文
摘要:
一、业务背景 当项目中涉及到频繁的对象的创建和回收的时候,就会出现频繁GC的情况,这时就出现了池化的技术来实现对象的循环使用从而避免对象的频繁回收,Netty包下的Recycler就实现了这一功能。当创建对象的时候直接从池中获取,但使用完毕进行回收的时候, 直接将对象回收到池中,这样可以大量减少对象 阅读全文
摘要:
提起分布式系统,就会涉及分布式事务,本文就以金融项目的转账业务为例,分析各种业务场景下的转账业务的事物问题。 一、业务场景 以工商银行转账业务为例,那么项目的分布式架构大致如下,一个银行的一个支行部署一个节点,那么相同节点之间的业务就是本地事务、不同节点之间的就是分布式事务 转账业务包括以下三种情况 阅读全文
摘要:
ThreadLocal 是本地线程变量,是一个以ThreadLocal对象为key,任意对象为value的存储结构。 一、使用案例 1.定义线程类MyThread,代码如下: 2.测试方法Main方法 定义两个线程,线程的run方法执行了ThreadLocal变量的set操作,然后再执行get操作, 阅读全文
摘要:
业务背景 项目是基于Netty实现的实时课堂项目,课堂中老师需要对试卷进行讲解,则老师向服务器发送一个打开试卷信息的请求,服务器获取试卷信息,将试卷信息发送给所有的客户端(学生和老师)。 发送给学生的时候需要在试卷信息中加上本人得分的信息。 实现方式大致如下: 结果:学生A收到的得分是学生B的得分, 阅读全文
摘要:
InnoDB作为mysql数据库最常用的存储引擎,自然包含了其独有的很多特性。如相比于memory、MyISAM引擎,InnoDB支持行级锁、事务等都是比较重要的特性。 本文将盘点下InnoDB处理事务和行级锁之外的高级特性 一、自适应哈希 innodb建立索引时,只可以建立B+tree索引,是不可 阅读全文