摘要: JDK5的java.util.concurrent包中的执行器将为你管理Thread对象,从而简化了并发编程。Executor在客户端和任务执行之间提供了一个间接层;与客户端直接执行任务不同,这个中介对象执行任务。Executor允许你管理异步任务的执行,而无须显示的管理线程的周期。 Eexecut 阅读全文
posted @ 2018-01-17 22:27 huanStephen 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。 为什么要用线程池? 线程池可以对开发带来以下好处: 降低资源消耗 提高相应速度 提高线程的可管理性 线程池的组成 线程的容器和管理器 工作线程 任务接口 任务的容器 处理流程 输出: 上面是我 阅读全文
posted @ 2018-01-15 20:58 huanStephen 阅读(201) 评论(0) 推荐(0) 编辑
摘要: Fork/Join框架 在JDK7后提供一套并行任务的框架,它可以把发大任务拆分成很多的小任务,汇总每个小任务的结果得到大任务的结果。 工作窃取算法 工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务。 那么,为什么需要使用窃取算法呢?假如我们需要做一个比较大的任务,可以把这 阅读全文
posted @ 2018-01-13 17:29 huanStephen 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 为什么要使用ConcurrentHashMap? 在多线程环境下,会用HashMap进行put操作会引起死循环,导致CPU利用率接近100%。因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点用不为空,就会产生死循环获取Entry。 Has 阅读全文
posted @ 2018-01-09 22:26 huanStephen 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 什么是同步器? 多线程并发执行,通过某种共享状态来同步,当共享状态满足某种条件,才能触发线程开始执行操作。 AbstractQueuedSynchronizer(AQS) 这是一个抽象类,它提供多线程下不同共享模式的操作,实现它可以自定义同步器。 可以看出,ReentrantLock和Reentra 阅读全文
posted @ 2018-01-07 15:09 huanStephen 阅读(390) 评论(0) 推荐(0) 编辑
摘要: 在JDK1.5以后,在并发包(java.util.concurrent)里面添加包locks,并提供了Lock接口,用于与synchronized类似的锁功能,不同的是Lock需要手动开启锁和释放锁。 为什么要用Lock锁? Lock锁的实现类图 Lock锁的常用API lock():加锁 lock 阅读全文
posted @ 2018-01-06 12:49 huanStephen 阅读(2766) 评论(0) 推荐(0) 编辑
摘要: 通常使用volatile关键字修饰字段可以实现多个线程的可见性和读写的原子性,但是对于字段的复杂性操作就需要使用synchronize关键字来进行,例如: 这里可以看到,对于字段的简单设置和获取,volatile可以应付,但是我们想每次获取后自增加1,这样的操作就只能交给synchronize来做, 阅读全文
posted @ 2018-01-06 11:11 huanStephen 阅读(576) 评论(0) 推荐(1) 编辑
摘要: 什么是多线程? 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。 为什么要用多线程? 充分利用多处理核心 更快的响应时间 java默认的线程 输出: 其中还有一个GC垃圾回收的线程,但是由于没有产生垃圾堆栈,所以该线程没有启动。 线程的状态 一共包括四种状态 阅读全文
posted @ 2017-12-31 12:31 huanStephen 阅读(395) 评论(0) 推荐(0) 编辑
摘要: MySQL配置优化 通过配置my.cnf使数据库达到优化的目的。 1、innodb的缓冲池配置 innodb_buffer_pool_size 通常配置服务器内存的60%~70% 2、innodb log缓存配置 innodb_log_buffer_size 这个不宜配置太大,因为日志缓存每秒刷新一 阅读全文
posted @ 2017-12-27 20:40 huanStephen 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 原理 MySQL主从复制通过两台机器,实现一台机器数据的变化在另一台机器上实时同步的过程。 首先开启master数据库和slave的binlog文件,再给master创建slave允许复制的用户。当master数据库获取到更改数据库的SQL语句时,master数据库会将更改数据库的SQL保存至bin 阅读全文
posted @ 2017-12-24 18:20 huanStephen 阅读(175) 评论(0) 推荐(0) 编辑