Java
126 篇文章
java
Java—并发编程(六)JUC锁 – (2) ReentrantLock
ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。 顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,Ree…
Java—并发编程(六)JUC锁 – (1)总览
根据锁的添加到Java中的时间,Java中的锁,可以分为"同步锁"和"JUC包中的锁"。 同步锁 即通过synchronized关键字来进行同步,实现对竞争资源的互斥访问的锁。Java 1.0版本中就…
Java—并发编程(五)AtomicXXX(原子类)
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。 1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2. 数组类型…
Java—并发编程(四)volatile关键字
一、内存模型 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU…
Java—并发编程(三)线程等待\唤醒\让步\休眠\join\守护……
线程等待与唤醒 1. wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口。 wait…
Java—并发编程(二)synchronized关键字
1. synchronized原理 在java中,每一个对象有且仅有一个同步锁。这也意味着,同步锁是依赖于对象而存在。当我们调用某对象的synchronized方法时,就获取了该对象的同步锁。例如,s…
Java—并发编程(一)线程基础
多线程是Java中不可避免的一个重要主体。接下来的内容,是对“JDK中新增JUC包”之前的Java多线程内容的讲解,涉及到的内容包括,Object类中的wait(), notify()等接口;Thre…
Java—Cglib基本使用
Cglib是什么 Cglib是一个强大的、高性能的代码生成包,它广泛被许多AOP框架使用,为他们提供方法的拦截。 对此图总结一下: 最底层的是字节码Bytecode,字节码是Java为了保证“一次编译…
Java—Cglib的invoke和invokeSuper区别
简而言之,invoke方法调用的对象没有增强过,invokeSuper方法调用的对象已经是增强了的,所以会再走一遍 MyMethodInterceptor的 interceptor方法,如果是个拦截器…
Java—Javassist(动态代理)(动态字节)
概述 Javassist是一个开源的分析、编辑和创建Java字节码的类库,可以直接编辑和生成Java生成的字节码。相对于bcel, asm等这些工具,开发者不需要了解虚拟机指令,就能动态改变类的结构,…
Java—加密扩展(JCE)框架 之 Cipher-加密与解密
javax.crypto.Cipher,翻译为密码,其实叫做密码器更加合适。Cipher是JCA(Java Cryptographic Extension,Java加密扩展)的核心,提供基于多种加解密…
Java—CAS机制
CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。 CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。 更新一个变量的时候,只有当变量的预期值…
Java— I/O流框架
1、流的概念 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象 流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 IO流总览 2、IO流分类 按照…
Java—网络编程(Socket)
1、概述 计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来的,实现资源共享和数据传输的系统。网络编程就是编写程序使互联网的两个(或多个)设备(如计算机)之间进行数…
Java—实现判断一个经纬度坐标是否在一个多边形内
创建一个实体类:Point public class Point { private Double x; private Double y; public Point (Double x , Doub…
Java—设计模式Builder模式
Builder模式理解 比如说你需要构造一个机器:是不是会包含很多部件,但是根据相同的制造过程可以制作出不同的机器(机器猫,机器狗,机器人,机器等等)。再比如说相同的注册流程可以注册出不同的公司(百度…
Java—根据经纬度计算实际距离
在项目中可能会遇到需要计算坐标点的距离等,所以我们需要通过这个包来实现。 <dependency> <groupId>org.gavaghan</groupId> <artif…
Java—线程池Executors使用中的坑
我们介绍过了Java中线程池的常见用法以及基本原理。 http://www.enmalvi.com/2020/10/26/java-threadpoolexecutor-threadpooltaske…
Java—ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量
1、概述 在Java中,我们一般通过集成Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动。但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的…
Java—集合知识总结
集合概述 集合:集合是Java中提供的一种容器,可以用来存储多个数据。 集合和数组的区别: (1)数组长度的是固定的,集合的长度是可变的。 (2)数组中存储的都是同一类型的元素。集合存储的都是对象,对…
Java—Pair、MutablePair、ImmutablePair(实用数据结构推荐apache)
当一个函数返回两个值并且两个值都有重要意义时我们一般会用Map的key和value来表达,但是这样的话就需要两个键值对,用Map映射去做处理时,此时的key相当于value的一个描述或者引用,而具体的…
Java—Future、FutureTask、CompletionService、CompletableFuture多线程并发中归集问题的效率对比
开启线程执行任务,不管是使用Runnable(无返回值不支持上报异常)还是Callable(有返回值支持上报异常)接口,都可以轻松实现。那么如果是开启线程池并需要获取结果归集的情况下,如何实现,以及优…
Java8—新特性之CompletableFuture(构建异步应用)
异步 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。因此为了提高系统整体的并发性能,引入了异步执行~ jdk中已经内置future模式的实现。Future是Java5添…
Java—Future与FutureTask的区别与联系
Future模式简述 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。 Futrue模式下,调用方式改为异步。Futrue模式的核心在于:充分利用主函数中的等待时间,利用…
Java—Future模式(数据库连接池)
在学习了Future模式后可以来尝试着应用它,所有就有了这个数据库连接池。 http://www.enmalvi.com/2020/10/25/java-future-2/ 1、手动写一个数据库连接池…
Java—Future模式(设计思想)
Futrue模式简介 Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门。Future模式就是,当某一程序提交请求,期望得到一个答复。但…
Java—快速开发二维码生成服务(ZXing)
不知道从什么时候开始,我们的生活突然之间就充满了二维码,连街边大妈的鸡蛋饼早餐摊也贴上了二维码。而且这次疫情的管控也用上了二维码,避免手工填写造成交叉感染。那么 Java 如何开发二维码功能呢? 1.…
Java—JJWT使用
其中JAVA语言到(2018-06)有6个实现库,如下图: 按顺序依次是 Auth0实现 的 java-jwt Brian Campbell实现的 jose4j connect2id实现的 nimbu…
Java—使用Jwt(Token令牌)
什么是JWT 提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。 令牌(Token)本身包含了一系列声明,应用程序可以根据这些声明限制用户对资源的…
Java—自定义注解
插入式注解处理API可以让你在编译期访问注解元数据,处理和自定义你的编译输出,像反射一样访问类、字段、方法和注解等元素,创建新的源文件等等。可用于减少编写配置文件的劳动量,提高代码可读性等等。 htt…