声明: 本文基于 JDK1.8
引子
线程池的作用
减少资源开销
线程可以重用,减少每次创建线程、销毁线程的开销。
提高响应速度
每次请求到来,由于线程已经创建好,故可以直接执行任务。
提高线程的可管理性
线程过多会占用大量资源,导致 OOM 等问题,同时会造成相互之间竞争。线程池可以对线程的创建与停止、线程的数量等加以控制,提高系统稳定性。
提供定期、延时等功能
最近翻看 JDK8 源码,发现 Integer 的两个有意思的方法:numberOfLeadingZeros 和 numberOfTrailingZeros。
这两个方法作用很好理解,就是返回一个二进制整数最左边或最右边连续的0的个数。
粗略地想了下,我应该会这么实现:
1 | public static int getIntegerLeadingZeros(int i) { |
有 n 位乘客即将登机,飞机正好有 n 个座位。第一位乘客的票丢了,他随便选了一个座位坐下。
剩下的乘客将会:
如果他们自己的座位还空着,就坐到自己的座位上,
当他们自己的座位被占用时,随机选择其他座位
第 n 位乘客坐在自己的座位上的概率是多少?
来源:https://leetcode-cn.com/problems/airplane-seat-assignment-probability