想做技术博客,但却更喜欢分享生活。

Java标签

对线程池ExecutorService的关闭的研究

最近在使用ExecutorService的时候,对其关闭操作的概念非常模糊。查阅了许多文章、问答之后,有了一个总结。
shutdown:
1. 调用之后不允许继续往线程池内继续添加线程;
2. 线程池的状态变为SHUTDOWN状态;
3. 所有在调用shutdown()方法之前提交到ExecutorSrvice的任务都会执行;
4. 一旦所有线程结束执行当前任务,ExecutorService才会真正关闭。

shutdownNow():
1. 该方法返回尚未执行的task的List;
2. 线程池的状态变为STOP状态;
3. 阻止所有正在等待启动的任务,并且停止当前正在执行的任务;

2017-02-15

UnsupportedOperationException 的研究

最近设计的一个类中,有成员属性Map<String, List>,其因为某些奇怪的原因,在给value的List调用add或者remove方法时抛出了UnsupportedOperationException异常,于是对其进行了研究。

记一个在制作服务器过程中遇到的坑

关于HTTP 的响应头 Content-Range的记录。

Content-Range
用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

程序员必备经验之从项目中来与到项目中去

很多朋友问我最近在忙什么?我很奇怪为什么他们能一眼就看出我在“忙”。后来仔细想想,认为这和我的生活习惯很有关系。
平时自由散漫惯了,等到一有事情的时候就手忙脚乱,天天板着脸,看上去像天塌了一样。
哦不,至少对前几天的我来说,是“天就要塌了”。
多变的需求,紧凑的时间,打的我措手不及。
恨不得一天掰成两天用,一台电脑劈成两台电脑用,一个人分身成两个人用。

2016-12-07

关于Java 8 新特性,default方法

Java8的一个重要的特性就是引入了函数式方法,其中Collection接口中增加了新的stream()方法。
我们都知道在Java的接口中只能定义方法,而不能对方法进行具体实现。其方法的实现必须要到实现了该接口的非抽象子类中实现。
因为接口导致的这个语法限制,使得要实现Collection接口的stream()方法全覆盖变得异常困难。难道所有继承了Collection接口的类中都要重写stream()方法的实现吗?显然不是的。机智的Java开发工程师们在Java8中引入了这样一个新的概念——’default’方法。

2016-11-06

微信红包算法的分析

发100块钱,总共10个红包,那么平均值是10块钱一个,那么发出来的红包的额度在0.01元~20元之间波动。
当前面3个红包总共被领了40块钱时,剩下60块钱,总共7个红包,那么这7个红包的额度在:0.01~(60/7*2)=17.14之间。
注意:这里的算法是每被抢一个后,剩下的会再次执行上面的这样的算法(Tim老师也觉得上述算法太复杂,不知基于什么样的考虑)。
这样算下去,会超过最开始的全部金额,因此到了最后面如果不够这么算,那么会采取如下算法:保证剩余用户能拿到最低1分钱即可。
如果前面的人手气不好,那么后面的余额越多,红包额度也就越多,因此实际概率一样的。

2016-11-05

Java 泛型三大使用场景

泛型是Java中比较重要的点。本文分析了泛型的三种使用场景,并且带有示例代码。
1. 泛型类
2. 泛型接口
3. 泛型方法
4. 练习