12 2019 档案
摘要:/** * Mongo中要处理的数据量比较多时,可以进行分批量处理 * 使用MongoTemplate分批进行处理数据 * skip(num).limit(10000) 跳过num条数据后,取10000条数据 */ public static void main(String[] args) { /
阅读全文
摘要:public static void main(String[] args) throws ParseException { String firstDate = "2019-01-01"; String lastDate = "2019-012-31"; String createdTime =
阅读全文
摘要:/** * java.util.concurrent.locks包提供的ReentrantLock用于替代synchronized加锁* 因为synchronized是Java语言层面提供的语法,所以我们不需要考虑异常,* 而ReentrantLock是Java代码实现的锁,我们就必须先获取锁,然后
阅读全文
摘要:/** * ReentrantLock使用Condition对象来实现wait和notify的功能* 使用Condition时,引用的Condition对象必须从Lock实例的newCondition()返回,这样才能获得一个绑定了Lock实例的Condition实例* Condition提供的aw
阅读全文
摘要:/** * StampedLock和ReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。* 乐观锁的意思就是乐观地估计读的过程中大概率不会有写入,因此被称为乐观锁。
阅读全文
摘要:/*** JDK提供了ExecutorService实现了线程池功能:* 线程池内部维护一组线程,可以高效执行大量小任务;* Executors提供了静态方法创建不同类型的ExecutorService;* 必须调用shutdown()关闭ExecutorService;* ScheduledThr
阅读全文
摘要:/** * Runnable接口有个问题,它的方法没有返回值。如果任务需要一个返回结果,那么只能保存到变量,还要提供额外的方法读取,非常不便。 * Java标准库还提供了一个Callable接口,和Runnable接口比,它多了一个返回值 * Callable接口是一个泛型接口,可以返回指定类型的结
阅读全文
摘要:explain使用介绍 id:执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置 select_type:显示本行是简单或复杂select。如果查询有任何复杂的子查询,则最
阅读全文
摘要:一、volatile关键字 volatile关键字的目的是告诉虚拟机:1.每次访问变量时,总是获取主内存的最新值;2.每次修改变量后,立刻回写到主内存。 volatile关键字解决的是可见性问题:当一个线程修改了某个共享变量的值,其他线程能够立刻看到修改后的值。volatile关键字解决了共享变量在
阅读全文
摘要:public class TestDataStructure { public static void main(String[] args) { int n = 4; int total = factorial(n); System.out.println(total);//24 } //阶乘递归
阅读全文