![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 83
青龙小码农
青龙小码农
展开
-
lombok详解
@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法作用于成员变量上,生成该成员变量的getter/setter方法Getter(lazy=true) 懒加载public @interface Getter { AccessLevel value() default AccessLevel.PUBLIC; Getter.AnyAnnotation[] onMethod() default {}; boolean lazy() de原创 2021-03-10 08:58:12 · 269 阅读 · 0 评论 -
8-并发编程-定时任务&定时线程池
ScheduledThreadPoolExecutor用来处理延时任务或定时任务。它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式:schedulescheduledAtFixedRatescheduledWithFixedDelay它采用DelayQueue存储等待的任务DelayQueue内部封装了一个PriorityQueue,它会根据time的先后时间排序,若time相同则根据sequenceNumber排序;DelayQ原创 2021-01-16 09:51:32 · 689 阅读 · 0 评论 -
7-并发编程-Future&ForkJoin框架原理分析
超线程:虚拟出多个核并发与并行并发可认为是一种程序的逻辑结构的设计模式可以用并发的设计方式去设计模型,然后运行在一个单核系统上可以将这种模型不加修改地运行在多核系统上,实现真正的并行并行是程序执行的一种属性对Java而言,对支持Concurrency(并发)/Parallelism(并行)的不断完善,明显地体现在优化并发与并行•Java 1 支持threads, locks, condition queues•Java 5 引入了 thread pools, blocking queu原创 2021-01-16 09:51:17 · 326 阅读 · 1 评论 -
6-并发编程-Executor线程池原理
线程池“线程池”,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控线程池介绍在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费原创 2021-01-16 09:50:59 · 265 阅读 · 0 评论 -
5-并发编程-Collections&Queue体系分析
BlockingQueue通常用链表或者数组实现一般而言队列具备FIFO先进先出的特性,当然也有双端队列(Deque)优先级队列主要操作:入队(EnQueue)与出队(Dequeue)1、ArrayBlockingQueue 由数组支持的有界队列队列基于数组实现,容量大小在创建ArrayBlockingQueue对象时已定义好(默认创建非公平锁)import bean.Ball;import java.util.concurrent.ArrayBlockingQueue;impor原创 2021-01-16 09:50:46 · 254 阅读 · 0 评论 -
4-并发编程-Atomic&CAS&Unsafe魔法类详解
原子操作原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。处理器如何实现原子操作首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动原创 2021-01-16 09:50:26 · 289 阅读 · 0 评论 -
3-并发编程-CountDownLatch&Semaphore&CyclicBarrie原理与应用
Semaphore 是什么?Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。Semaphore 基本能完成 ReentrantLock 的所有工作,使用方法也与之类似,Semaphore 也实现了可轮询的锁请求与定时锁的功能,Semaphore的锁释放操作也由手动进行. 可以用来构建一些对象池,资源池之类的,比如数据库连接池怎么使用 Semaphore?1 构造方法public Semaphore(int permits)public Semaphore(in原创 2021-01-16 09:50:12 · 195 阅读 · 0 评论 -
2-并发编程-Lock&AQS
设计同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改引出的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问那么我们怎么解决线程并发安全问题?实际上,所有的并发模式在解决线程安全问题时,采用的方案都是 序列化访问临界资源。即在同一时刻,只能有一个线程访问临界资源,也称作同步互斥访问。Java原创 2021-01-16 09:49:58 · 222 阅读 · 0 评论 -
1-并发编程-JMM&volatile详解
现代计算机理论模型与工作方式现代计算机模型是基于-冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存^储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指 令。程序与数据一样存贮,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。这一原理最初是由美籍匈牙利数学家冯.诺依曼于1945年提 出来的,故称为冯.诺依原创 2021-01-16 09:49:46 · 375 阅读 · 0 评论 -
0-并发编程-多线程
JAVA 线程实现/ 创建1.继承 Thread 类Thread 类本质上是实现了 Runnable 接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。public class MyThread extends Thread { public void run() { System.out.println.原创 2021-01-16 09:49:30 · 292 阅读 · 0 评论 -
0-并发编程-EMSI
处理器上有一套完整的协议,来保证Cache一致性。比较经典的Cache一致性协议当属MESI协议,奔腾处理器有使用它,很多其他的处理器都是使用它的变种。单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),而在多核处理器中,多个核会共享一些数据,MESI协议就包含了描述共享的状态。在MESI协议中,每个Cache line有4个状态,可用2个bit表示,它们分别是:M(Modif原创 2021-01-16 08:19:32 · 1158 阅读 · 0 评论 -
5-JVM-调优工具详解
JVM参数-Xms 初始堆大小-Xmx 最大堆大小-Xmn 年轻代大小,此处的大小是:eden+2survivor(1.4or lator)-Xss 每个线程的堆栈大小-XX:MaxPermSize 设置持久代最大值-XX:MetaspaceSiz 配置元空间内存(1.8+)-XX:MaxMetaspaceSize 配置元空间最大内存(1.8+)-XX:+DoEscapeAnalysis JDK7之后默认开启逃逸分析,如果要关闭使用参数(-XX:-DoEscapeAnalysis)-XX原创 2021-01-15 09:56:16 · 441 阅读 · 0 评论 -
4-JVM-垃圾收集器详解
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。1 Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程”的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在..原创 2021-01-15 09:42:19 · 160 阅读 · 0 评论 -
3-JVM-内存分配机制与垃圾回收算法
1 对象优先在Eden区分配大多数情况下,对象在新生代中 Eden 区分配。当 Eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC 我们先来看看 Minor GC和Full GC 有什么不同呢?Minor GC/Young GC:指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。Major GC/Full GC:一般会回收老年代 ,年轻代,方法区的垃圾,Major GC的速度一般会比Minor GC的慢10倍以上。/添加运行JVM参数: -XX原创 2021-01-15 09:28:34 · 166 阅读 · 0 评论 -
2-JVM-内存模型
程序计数器:记录的是正在执行的字节码的指令地址,如果执行的是native方法,计数器的值为空,此内存区域是是唯一一个在java虚拟机中没有规定任何oom情况的区域,为了程序切换后能够恢复到正确的执行,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,这类内存区域为“线程私有”的内存】虚拟机栈(也会发生oom)线程私有、局部变量表存放了编译期可知的各种基本数据类型、对象应用类型如果线程请求的栈深度大于虚拟机所允许的深度,将会抛出StackOverFlorError;如果.原创 2021-01-15 09:13:00 · 249 阅读 · 0 评论 -
1-JVM-类加载机制深度剖析
Class文件每个Class文件的头4个字节被称为魔数(Magic Number)紧接着魔数的4个字节存储的是Class文件的版本号:第5和第6个字节是次版本号(MinorVersion),第7和第8个字节是主版本号(Major Version)紧接着主、次版本号之后的是常量池入口量池结束之后,紧接着的2个字节代表访问标志(access_flags)类索引、父类索引与接口索引集合字段表集合方法表集合属性表集字节码指令加载和存储指令 用于将数据在栈帧中的局部变量表和操作数栈原创 2021-01-15 08:49:49 · 277 阅读 · 0 评论 -
HttpClient超时时间设置
方式1(4.3以后)RequestConfig config = RequestConfig.custom().setConnectTimeout(3000).setConnectionRequestTimeout(3000).setSocketTimeout(3000).build();httpost.setConfig(config);方式2(4.3)httpost.getPa...原创 2019-12-04 16:23:38 · 1116 阅读 · 0 评论 -
visualvm
VisualVM 是一个性能分析工具,自从 JDK 6 Update 7 以后已经作为 Oracle JDK 的一部分,位于 JDK 根目录的 bin 文件夹下。VisualVM 自身要在 JDK6 以上的版本上运行,但是它能够监控 JDK1.4 以上版本的应用程序。JDK自带的有问题,建议官网下载https://visualvm.github.io/,2中链接方式如下:JMX方式 配置...原创 2019-08-06 15:18:55 · 354 阅读 · 0 评论 -
Tomcat+Https+Nginx
命令介绍• -genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)注:-genkey可以写成-genkeypair• -alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写• -key...原创 2019-08-13 12:51:33 · 243 阅读 · 0 评论 -
Maven--pom.xml 配置详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/mave...翻译 2019-08-13 13:04:31 · 174 阅读 · 0 评论 -
YAPI安装-支持后台运行(关闭shell)
介绍YApi 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。环境要求nodejs(7.6+)mongodb(2.6+)git安装nodejs安装# yum insta...翻译 2019-08-14 13:46:31 · 4521 阅读 · 1 评论 -
keytool创建SSL证书和密钥
Keytool用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)...原创 2019-08-13 11:50:53 · 1471 阅读 · 0 评论 -
java.util.concurrent.atomic
原子操作在多线程或者并发环境中,我们常常会遇到这种情况 int i=0; i++ 但这种写法是线程不安全的。为了达到线程安全的目的,我们通常会用synchronized来修饰对应的代码块,但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案,还有一种办法就是使用J.U.C包下的atomic类。atomic包提供了一系列的操作简单,性能高效,并能保证线程安全的类去更...原创 2019-09-20 09:21:51 · 528 阅读 · 0 评论