- 博客(15)
- 资源 (5)
- 收藏
- 关注
原创 javassist使用
一.介绍 Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类...
2019-08-31 11:16:00
187
2
原创 粘包问题的解决策略
由于底层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,解决方案如下:消息定长,例如每个报文的大小固定长度200字节,如果不够,使用空位补空格; 在包尾增加回车换行符进行分割,例如ftp协议; 将消息分为消息头与消息体,消息头中包含表示消息长度的字段,通常设计思路为消息头的第一个字段使用int32来表示消息总长度; ...
2019-08-26 23:32:03
112
原创 volatile的定义与原理
一.定义java语言规范第三版对volatile的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。java语言提供了volatile,在某些情况下比锁更加方便,如果一个字段被声明称volatile,java线程内存模型能够确保所有线程看到这个变量的值是一致的。二. volatile如何保证可见性我们在...
2019-08-20 22:10:33
139
原创 java线程池实现原理
当向线程池投寄一个任务之后,线程池是如何处理这个任务的呢?线程池判断核心线程池(基本线程数,就是创建线程池的第一个参数)里面的线程是否都在执行任务。如果不是,就创建一个新的线程来执行任务。如果核心线程池里面的线程都在执行任务,则进入下一个流程。其实就是判断核心线程池里面的线程数量达到你设置的那个基本线程数量没有,没有就创建一个新的线程来执行你的任务。 线程池判断工作队列(就是创建线程池时候那...
2019-08-17 21:12:37
88
原创 java线程池2
一.向线程池提交任务可以使用两个方法向线程池提交任务,execute()和submit()。1.execute()用于提交不需要返回值的任务,所以没法判断任务是否被线程池执行成功。execute方法输入的任务是一个Runnable类的实例。2.submit()用于提交需要返回值的任务,线程池会返回一个future 类型的对象,这个future 对象可以 判断任务是否执行成功,并...
2019-08-16 21:40:35
58
原创 Amdahl定律
一.介绍Amdahl(Amdahl)定律是计算机科学中非常重要的定律,他定义了串行系统并行化后加速比的计算公式和理论上限。加速比定义: 加速比= 优化前系统消耗/ 优化后系统消耗所谓的加速比,就是优化前的消耗与优化后的消耗的比值。优化比越高,就说明优化效果越明显。Amdahl定律给出了加速比与系统并行度和处理器数量的关系。设加速比为speedup,系统内必须串行化的程序比重为F,C...
2019-08-14 12:19:50
183
原创 java线程池
一.为什么要使用线程池?1.降低资源的消耗。通过重复利用已经创建的线程降低线程创建和销毁造成的消耗。2.提高响应速度。当任务到达时,任务可以不用等到线程创建就能执行(前提是空闲情况下)3.提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配,调优和监控。二.线程池的创建可以通过new ThreadPoolEx...
2019-08-12 21:53:55
63
原创 jvm类加载机制
jvm类加载机制分为五个部分:加载,验证,准备,解析,初始化1.加载: 找到.class文件并把这个文件包含的字节码加载到内存中,然后在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据入口。注意这里不一定非得从一个Class文件中获取,既可以从zip包中读取(jar 或者war包中读取),也可以在运行时计算(动态代理)生成,也可以由其他文件生成,比...
2019-08-11 22:11:29
58
原创 java并发工具类之Semaphore
一.介绍Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。通俗的理解就是,Semaphore能够控制并发线程的数量,可以把它比作控制流量的红绿灯,比如说马路要限制流量,只允许同时一百辆汽车在这条路上行驶,其他的都必须在路口等待,所以前一百辆车会看到绿灯,可以开进这条马路,而后面的车则会看到红灯,不能驶入马路,但是如果前一百辆车中有5...
2019-08-10 21:56:20
65
原创 java并发工具之Exchanger
一.介绍Exchanger(交换者),是用于线程间协作的工具类,Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据,这两个线程通过exchange方法交换数据,如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。二...
2019-08-09 23:24:45
67
原创 java并发工具类之CountDownLatch
一.介绍CountDownLatch允许一个或者多个等待其他线程完成操作。CountDownLatch可以理解为一个计数器,比如说我有5个下载任务需要5个线程来同时进行下载,然后全部下载完成进行提示,这时候我们就需要知道这5个线程的状态了,有一种比较好理解的方案就是 设置一个变量作为计数器,来统计下载完成的数量,每当有线程下载完成的时候就对这个数量加1,然后我们有个主线程来不停的访问判断这个统...
2019-08-07 21:31:16
139
原创 java并发工具类之CyclicBarrier
一.介绍CyclicBarrier的字面意思是可以循环使用的(Cyclic)的屏障(Barrier),它主要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。图01 :01与02 线程先到达了Barries,被阻塞,等待03线程的到来。图02 :03 线程到达,Barries开门,02线程获得...
2019-08-05 21:45:15
77
原创 springboot整合swagger2
一.介绍swagger,中文是“拽”的意思,是一个功能强大的在线api文档的框架,swagger2中提供了在线文档的查阅与测试功能,使用swgger2能够很容易构建restful风格的api。二.使用2.1 maven坐标引入 <dependency> <groupId>io.springfox</groupId...
2019-08-04 21:23:03
68
原创 cron表达式详解
表达式解释*注:表格中位置列 是 cron表达式从左 到右的位置位置 含义 取值范围 符号 1 秒 0-59 , - * / 2 分 0-59 , - * / 3 时 0-23 , - * / 4 日 1-30(31) , - * / L W C ? 5 月 ...
2019-08-02 21:05:41
139
原创 xxl-job源码解读之任务调度器(核心)
一.任务调度器介绍在xxl-job中,有两个角色,一个是执行器,另一个就是调度中心了。而任务调度器可以说是调度中心的最核心,我们发往执行器的任务,都是从任务调度器发出来的(除手动执行的)。二.原理解读首先我们要带着这几个问题来解读原理:1.分布式任务调度有个很重要的点,就是怎样保证一次任务调度被消费一次,也就是怎样保证幂等性?2.是怎样实现调度的,调度流程是什么样的?3.出...
2019-08-01 23:09:25
1129
JAVA核心知识点整理
2020-10-19
RocketMQ可视化控制台
2020-10-19
java线上诊断工具arthas
2020-07-03
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人 TA的粉丝