摘要: volatile特性 内存可见性:通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。 volatile的使用场景 通过关键字sychronize可以防止多个线程进入同一段代码,在某些特定场景中,volatile相当于一个 阅读全文
posted @ 2019-01-25 16:22 He_quotes 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 饿汉法 顾名思义,饿汉法就是在第一次引用该类的时候就创建对象实例,而不管实际是否需要创建。代码如下: 1 2 3 4 5 6 7 public class Singleton { private static Singleton = new Singleton(); private Singleto 阅读全文
posted @ 2019-01-25 16:00 He_quotes 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 线程池介绍 在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题: 如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个 阅读全文
posted @ 2019-01-25 14:29 He_quotes 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 为什么用线程池? 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处-理效率 2.线程并发数量过多,抢占系统资源从而导致阻塞 3.对线程进行一些简单的管理 在Java中,线程池的概念是Executor这个接口,具体实现为ThreadPoolExecutor类,学习Java 阅读全文
posted @ 2019-01-25 14:20 He_quotes 阅读(761) 评论(0) 推荐(0) 编辑
摘要: 本文关注以下几点内容: 基本上本文把以上几点都说清楚了,我假设读者看过上一篇文章中对 AbstractQueuedSynchronizer 的介绍,当然如果你已经熟悉 AQS 中的独占锁了,那也可以直接看这篇。各小节之间基本上没什么关系,大家可以只关注自己感兴趣的部分。 公平锁和非公平锁 Condi 阅读全文
posted @ 2019-01-25 12:17 He_quotes 阅读(152) 评论(0) 推荐(0) 编辑
摘要: BlockingQueue 开篇先介绍下 BlockingQueue 这个接口的规则,后面再看其实现。 首先,最基本的来说, BlockingQueue 是一个先进先出的队列(Queue),为什么说是阻塞(Blocking)的呢?是因为 BlockingQueue 支持当获取队列元素但是队列为空时, 阅读全文
posted @ 2019-01-25 12:14 He_quotes 阅读(220) 评论(0) 推荐(0) 编辑