7 归海一刀之渔舟唱晚

尚未进行身份认证

我要认证

个人微信 tian_happy99

等级
TA的排名 3w+

如果线程池中线程任务已经执行完毕了,当前线程的状态是怎样的?

1.代码样例int corePoolSize = 2; int maximumPoolSize = 4; long keepAliveTime = 20; TimeUnit unit = TimeUnit.SECONDS; ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, ma...

2020-02-03 10:15:19

带你阅读spring容器源码创建过程

一.引言 在java体系中,spring是一个非常出名的框架。它包含了很多东西,但是IOC容器是它的基本功能,这个不可不知。二.spring容器加载方式在spring中,主要有三种方式加载容器:1.使用类路径加载配置文件ClassPathXmlApplicationContext("bean.xml")2.使用文件系统加载配置文件FileSystemXm...

2019-06-02 18:36:00

httpclient大量请求网络拒绝 Connection pool shut down

1.背景描述项目中每次400条数据递归网络请求第三方数据,该次递归总的数据量有220000左右,可以算出大概需要550次调用。但是数据跑到13W左右,程序中断。2.案例分析①.系统跑了一遍,没有看到任何日志。分析: 因为是多线程应用,一开始以为是线程池写法有误,导致数据库连接用完,解决:使用自定义连接池上了一版,并且加上了日志。②.系统再跑了一遍,发现日志报错...

2019-05-30 10:38:57

消息顺序调度器--pmoc

一.说明 框架主要解决消息按顺序消费问题,比如 1,2,3,4,5 ,可以一次性将消息消费完。 3,2,7 第一次只能消费3,第二次可以消费2,7 项目中主要支持两个配置方式,redis模式,mysql模式 具体配置看代码[pmoc-core]config.driver包二.架构设计 项目中主要完成了redis模式的实现 redis: 设计了...

2019-05-19 18:52:40

手写分布式配置中心

一.引言 随着微服务架构的兴起,分布式配置中心越来越必不可少。目前比较流行的有携程的Apollo,阿里的disconf,淘宝的diamond。二.原理 其实实现原理可以简单的概括如下:客户端先集成框架,在启动的时候已经将客户端的ip和端口发送到了注册中心(比如zookeeper),再设置具体某个值得时候,发送给服务器端,服务器端接收到请求后,依次通知之前注册的机器。这样随便...

2019-04-15 23:40:55

算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化。比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮。问设计一道算法,使得所有

算法题:一个圆环上有100个灯泡,灯泡有打开和关闭两种状态,灯泡的状态随机,按一个灯泡的开关,相邻的两个灯泡的状态也发生一次变化。比如暗-亮-暗,按中间灯泡,变化为亮-暗-亮。问设计一道算法,使得所有灯泡最后都亮。解答:第一阶段,如果给100个灯泡编号0~99 ,顺序往下走,如果灯是亮的就不管,灭的就按下后面灯泡使这个灯亮(在第一循环内,也就是还没有从99走到0)。如果都是亮的那正好万事大...

2019-04-12 18:57:47

延时job设计

一.设计初衷           目前系统系统job任务是每10分钟重试一次,总共重试7次。所有需要重试的请求都在10分钟之内堆积,如果请求量过大,这个时间点压力都有可能落到数据库上面,从而造成数据库崩溃。    此外时间配置不够智能化。如果两小时之后所依赖的第三方系统稳定,而目前的重发机制相当于失效了。 基于上面两个原因,提出了改进方案,使用延时job实现功能!二.功能原理   ...

2018-11-23 17:50:14

接口幂等设计

一.引言      在系统设计时,经常会出现每次操作结果都需要一致的场景。比如典型的restful get请求 ,每次请求url/student/1(查询第一个学生),结果都是一样的。当然排除再修改学生信息后又查询的情况。     接口幂等,通俗的定义可以为:每次同样的请求操作该接口,得到的结果都是一样的。二.实现方式      先给个场景,同样的订单编号发起两笔支付,按道理数据库...

2018-10-24 21:55:33

手写基于redis实现分布式限流器-pdlr

一.限流器介绍    简单来讲,限流器就是控制流量访问速率的一种机制,在短时间内大量流量访问时,不至于使服务器崩溃。比如,一分钟之内,如果限制1000个请求可以访问,当第1001个请求到达时,请求被拒绝(这时最好对其进行监控)。二.限流器的实现方式    目前常用两种:    1.使用计数器法。一段时间内,限制请求可以访问的个数,guava框架里面有一个ratelimit。  ...

2018-08-04 13:18:35

手写springmvc--PMVC

一.引言      在java体系中,说起架构,spring不可不谈,而它的一个子产品-springMVC在web开发中有着举足轻重的地位。由于spring不在讲解之列,这里就默认大家都会spring或者用过。二.架构    对于springmvc架构的理解,相信很多人都有自己的一套理解。但是都绕不过HttpServlet这个类。springmvc是基于该类的。先看一下这个类的集成层次httpSe...

2018-07-06 16:13:53

一个字段首字母大小写引发空值

一.引言     昨天同事反馈热配置的值一直赋值不上去,之前也是这样操作的,按道理没有问题。今天有时间就看了下源码。二.分析     首先交代一下代码场景:一个类(A)里面设置了三个字段 KFC,MyTest,age(这三个字段都是我随便取的),其中,KFC,age两个字段都已经获取到了值,而MyTest这个字段没有值。     怎么办?只能一步一步的追代码了。重点:看到类里面的字段名变成了myT...

2018-06-27 21:37:04

如何理解阻塞,非阻塞,同步,异步

一.问题引出之前和朋友讨论多线程问题的时候,朋友问了一下阻塞和同步的区别,当时顿时懵逼了。这两个概念给人最直接的感受就是:阻塞也是等,同步也是等呀!好像没什么区别吧。二.概念阻塞和非阻塞都是通常用来形容多线程间的相互影响。比如一个线程占用了临界资源,那么其他所有需要这个临界资源的线程都要在临界区等待,等待或造成线程的挂起,这种情况就是阻塞。它会一直尝试做,直到完成。平常用到的锁基本上就是阻塞的。非...

2018-06-26 20:40:34

实际开发中两个有意思的优化

一.引言在互联网开发过程中,响应速度应该也是程序开发特别要关注的点之一。下面讲讲开发中两个优化。二.事件1.接口A(XXX)        在写接口A的时候,需要用到订单信息,而这个下游的接口有时响应时间在300ms,它是放在首页被异步调用的。有人说反正是异步调用,300ms也不是很慢呀!用不着优化吧!确实300ms是在用户可以忍耐的极限内,但是自己代码只要几ms,调用别的接口用了这么多,着实这个...

2018-06-26 20:06:16

ReentrantLock之公平锁,可重入的理解

一.问题ReentrantLock是jdk5里面的一个方法类,主要讨论两个问题:1.ReentrantLock的可重入体现2.ReentrantLock的公平锁和非公平锁体现二.讲解2.1ReentrantLock的可重入体现...

2018-06-26 19:44:58

future的简单实现

一 .入门相信大家使用过线程,对future应该不会陌生吧! 在java一种最简单的使用是Callable,比如:public class A implements Callable<String> { @Override public String call() throws Exception { return "aaa"; }}@org....

2018-06-21 14:54:42

高并发下ArrayList空值(null)问题

对于ArrayList,有一篇blog专门的介绍,它不适用于多线程环境中,废话不多说,直接上代码让大家看个明白!public class ArrayListTest { @Test public void test() { List<Person> personList = new ArrayList<>(); for (in...

2018-06-20 12:30:49

《effective java》builder模式一些思考

      在java中,对于类中属性赋值,大部分情况下会使用set,get,可能还有些boolean的属性有些框架会用is做为前缀。但是对于一个类中有多个参数,总不能set多个参数或者构造函数中写多个参数的构造吧。在idea中生成构造函数和set/get方法都是有快捷方式的,但是在使用的时候就痛苦了。对于这个问题,有没有什么好的解决方法呢?《effective java》中推荐使用bulder模...

2018-05-05 22:45:41

分布式锁实现方案

在高并发场景中,我们需要对资源上锁。比如在秒杀商品时,大量请求过来,不上锁可能导致超卖等现象的发生。大家都知道在java中,它自身就提供了很多锁,synchronized,lock,ReentrantLock....它们可以工作在单机项目里面,但是在分布式项目里面,他们就不能保证对全局资源的掌控了。那如何实现在分布式环境中对全局资源的掌控呢?(声明,此处只探讨数据库和redis实现)1.数据库实现...

2018-05-05 19:25:24

shell命令实现服务的全启动

    有时候在单机服务器部署中,会启动好几个软件(排除用docker),比如nginx,redis,tomcat,mysql 。。。。  以前     在不知道服务装在哪里的情况下,可以用whereis命令查看文件的位置。     $ whereis nginx      nginx: /usr/local/nginx    然后     cd /usr/local/nginx      ls ...

2018-05-01 23:27:48

java排序--堆排序

一.简介       上一篇讲了快速排序,这一篇来讲讲堆排序。堆可以借助借助完全二叉树来理解,数值排列按照广度优先算法输出的顺序给出。堆排序分按大堆排序和小堆排序。堆排序就是一趟排序完,最大的值在最前面;而按小堆排序就是一趟排序完,最小的值在最前面。       排序过程为使记录序列按关键字非递减有序排序,则在堆排序的算法中,先建一个“大顶堆”,即先选得一个关键字为最大的记录并与序列中最后一个记录...

2018-04-29 21:48:48

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。