-
Java 锁机制了解一下2021/11/29
在多线程环境下,程序往往会出现一些线程安全问题,为此,Java提供了一些线程的同步机制来解决安全问题,比如:synchronized锁和Lock锁都能解决线程安全问题。悲观锁和乐观锁我们可以将锁大体分为两类:悲观锁乐观锁顾名思义,悲观锁总是假设最坏的情况,每次获取数据的时候都认为别的线程会修改,所以每次在拿数据的时候都......
-
Java 线程池配置的常见误区2021/11/22
来源:https://zhenbianshu.github.io由于线程的创建和销毁对操作系统来说都是比较重量级的操作,所以线程的池化在各种语言内都有实践,当然在 Java 语言中线程池是也非常重要的一部分,有 Doug Lea 大神对线程池的封装,我们使用的时候是非常方便,但也可能会因为不了解其具体实现,对线程池的配......
-
Spring Boot + Redis 实现各种操作,写得真好!2021/11/15
一、Jedis,Redisson,Lettuce 三者的区别共同点:都提供了基于 Redis 操作的 Java API,只是封装程度,具体实现稍有不同。不同点:1.1、Jedis是 Redis 的 Java 实现的客户端。支持基本的数据类型如:String、Hash、List、Set、Sorted Set。特点:使用阻......
-
Redis存储结构体信息,选hash还是string?2021/11/08
在讲到使用hash还是string存储的选择前,先了解Redis的hash和string结构。 一、string string和hash都是Redis的一种数据结构。string结构常用来缓存用户信息,通常将用户信息结构体使用JSON序列化成字符串,然后将序列化后的字符串存入Redis进行缓存。String数据结构R......
-
Java为什么需要虚拟机?2021/11/01
曾几何时,我们还是初识Hello World的时候,我们哪曾知道,Java这门神奇的语言,在执行我们的代码的时候,不是直接将我们所编写的Java代码交付给操作系统底层进行解析编译,而是采用了JDK来对Java代码进行编译,编译成dotClass文件后,将dotClass文件转交至JRE中。(dotClass其实就是.c......
-
分享几个工作中实用的代码优化技巧!2021/09/22
类成员与方法的可见性最小化 举例:如果是一个private的方法,想删除就删除 如果一个public的service方法,或者一个public的成员变量,删除一下,不得思考很多。 使用位移操作替代乘除法 计算机是使用二进制表示的,位移操作会极大地提高性能。 左移相当于乘...
-
为什么要给代码加注释?Java中的注释有几种?2021/09/13
注释是对程序的某个功能或者某行代码的解释说明,它能够让开发者在后期阅读和使用代码时能更容易理解代码的作用。 注释只在Java源文件中有效,在编译程序时编译器会忽略这些注释信息,不会将其编译到class字节码文件中。 Java中的注释有三种类型,具体如下:...
-
如何手写一个 AQS?2021/09/06
如果让我们自己 ,实现可以分为几个大部分: 加锁 解锁 入队 出队 阻塞 唤醒 我们来想一下这几个部分的实现。 1. 加锁 首先,用一个变量 state 作为锁的标志位。默认值0,表示此时所有线程都可以加锁。加锁的时候通过 CAS 将 state 从 0 变为 1,CAS 执行成...
-
Java多线程编程之不可变对象模式2021/08/23
到底什么是设计模式 其实模式这个概念是从建筑那里引进过来的,就如同正能量其实是从物理学(天体物理学)那里引进的一样,设计模式的定义是: 解决软件设计中给定背景下普遍存在的问题,并且具备一般性、可复用性解决方案 ; 设计模式虽然多,但是也有一些相...
-
Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?2021/08/09
概述 Spring Data JPA是Spring Data的子模块。使用Spring Data,使得基于repositories概念的JPA实现更简单和容易。Spring Data JPA的目标是大大简化数据访问层代码的编码。作为使用者,我们只需要编写自己的repository接口,接口中包含一些个性化的查询方法...