摘要:
查看CPU个数 cat /proc/cpuinfo | grep "physical id" | uniq | wc -l **uniq命令:删除重复行;wc –l命令:统计行数** 查看CPU核数 cat /proc/cpuinfo | grep "cpu cores" | uniqcpu cor 阅读全文
摘要:
Redis是单线程的,但为什么这么快? 1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)。 2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的。 3、采用单线程,避免了不 阅读全文
摘要:
Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW):新创建了一个线程对象。 2. 可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。 3. 运行(RU 阅读全文
摘要:
JAVA虚拟机加载类是采用双亲委派加载机制加载。 双亲委派模型 模型如下图: 双亲委派模型中除了启动类加载器之外其余都需要有自己的父类加载器。 当一个类收到了类加载请求时: 自己不会首先加载,而是委派给父加载器进行加载,每个层次的加载器都是这样。 所以最终每个加载请求都会经过启动类加载器。只有当父类 阅读全文
摘要:
MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ) 1) 读未提交(READ UNCOMMITTED) 另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)(隔离级别最低,并发性能高)。 2) 读已提交(READ 阅读全文
摘要:
阅读全文
摘要:
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略: AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 这是线程池默认的拒绝策略,在任务不能再提交的时候,抛出异 阅读全文
摘要:
1 当一个任务通过submit或者execute方法提交到线程池的时候,如果当前池中线程数(包括闲置线程)小于coolPoolSize,则创建一个线程执行该任务。 2 如果当前线程池中线程数已经达到corePoolSize,则将任务放入等待队列。 3 如果任务不能入队,说明等待队列已满,若当前池中线 阅读全文
摘要:
在并发编程中,使用线程池的好处是减少在创建和销毁线程上所花费的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量线程而导致消耗完内存或者“过度切换”的问题。 JAVA线程池有几个核心的参数,这几个参数的作用是: corePoolSize:核心线程数,当提交一个新的任 阅读全文
摘要:
常用的JAVA线程池有以下几种类型: 1、newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 这种类型的线程池特点是: 工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 阅读全文