摘要: /** * java.util.concurrent.locks包提供的ReentrantLock用于替代synchronized加锁* 因为synchronized是Java语言层面提供的语法,所以我们不需要考虑异常,* 而ReentrantLock是Java代码实现的锁,我们就必须先获取锁,然后 阅读全文
posted @ 2019-12-20 15:47 表演给自己看的认真 阅读(188) 评论(0) 推荐(0) 编辑
摘要: /** * ReentrantLock使用Condition对象来实现wait和notify的功能* 使用Condition时,引用的Condition对象必须从Lock实例的newCondition()返回,这样才能获得一个绑定了Lock实例的Condition实例* Condition提供的aw 阅读全文
posted @ 2019-12-20 14:53 表演给自己看的认真 阅读(159) 评论(0) 推荐(0) 编辑
摘要: /** * StampedLock和ReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。* 乐观锁的意思就是乐观地估计读的过程中大概率不会有写入,因此被称为乐观锁。 阅读全文
posted @ 2019-12-20 14:52 表演给自己看的认真 阅读(154) 评论(0) 推荐(0) 编辑
摘要: /*** JDK提供了ExecutorService实现了线程池功能:* 线程池内部维护一组线程,可以高效执行大量小任务;* Executors提供了静态方法创建不同类型的ExecutorService;* 必须调用shutdown()关闭ExecutorService;* ScheduledThr 阅读全文
posted @ 2019-12-20 14:51 表演给自己看的认真 阅读(168) 评论(0) 推荐(0) 编辑
摘要: /** * Runnable接口有个问题,它的方法没有返回值。如果任务需要一个返回结果,那么只能保存到变量,还要提供额外的方法读取,非常不便。 * Java标准库还提供了一个Callable接口,和Runnable接口比,它多了一个返回值 * Callable接口是一个泛型接口,可以返回指定类型的结 阅读全文
posted @ 2019-12-20 14:49 表演给自己看的认真 阅读(818) 评论(0) 推荐(0) 编辑
摘要: explain使用介绍 id:执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置 select_type:显示本行是简单或复杂select。如果查询有任何复杂的子查询,则最 阅读全文
posted @ 2019-12-20 11:36 表演给自己看的认真 阅读(4903) 评论(0) 推荐(0) 编辑