未来的事无人知晓, 所以才有无穷可能

Java 标签

最近在使用ExecutorService的时候,对其关闭操作的概念非常模糊。查阅了许多文章、问答之后,有了一个总结。
shutdown:

  1. 调用之后不允许继续往线程池内继续添加线程;
  2. 线程池的状态变为SHUTDOWN状态;
  3. 所有在调用shutdown()方法之前提交到ExecutorSrvice的任务都会执行;
  4. 一旦所有线程结束执行当前任务,ExecutorService才会真正关闭。

shutdownNow():

  1. 该方法返回尚未执行的task的List;
  2. 线程池的状态变为STOP状态;
  3. 阻止所有正在等待启动的任务,并且停止当前正在执行的任务;
2017-02-26 0 评论 0 浏览
阅读全文

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

2017-02-16 0 评论 0 浏览
阅读全文

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

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

2017-02-04 0 评论 0 浏览
阅读全文

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

2016-12-08 0 评论 0 浏览
阅读全文

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

2016-11-06 0 评论 0 浏览
阅读全文