摘要: 线程池ThreadPoolExecutor 为什么要使用线程池 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有 阅读全文
posted @ 2018-09-25 20:13 一把水果刀 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 线程和进程 线程和进程的概念,并行和并发的概念1、 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指 阅读全文
posted @ 2018-09-25 20:12 一把水果刀 阅读(157) 评论(0) 推荐(0) 编辑
摘要: ThreadLocal 该类提供了线程局部(thread-local)变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其get或set方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal实例通常是类中的私人静字段,它们希望将状态与某一个线程(例如,用户ID 阅读全文
posted @ 2018-09-25 20:11 一把水果刀 阅读(198) 评论(0) 推荐(0) 编辑
摘要: Exchanger 可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给交换方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象.Exchanger可能被视为SynchronousQueue的双向形式.Exchanger可能在应用程序(比如遗传算法和管道设计)中很有用。 阅读全文
posted @ 2018-09-25 20:10 一把水果刀 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 信号量Semaphore 信号量Semaphore是一个控制访问多个共享资源的计数器,和CountDownLatch一样,其本质上是一个“共享锁”。 Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。 信号量Semaphore是一个非负整数(>=1)。当一个线程想要访问某个 阅读全文
posted @ 2018-09-25 20:09 一把水果刀 阅读(277) 评论(0) 推荐(0) 编辑
摘要: CountDownLatch CountDownLatch与CyclicBarrier有点儿相似。 CyclicBarrier所描述的是“允许一组线程互相等待,直到到达某个公共屏障点,才会进行后续任务”,而CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多 阅读全文
posted @ 2018-09-25 20:08 一把水果刀 阅读(161) 评论(0) 推荐(0) 编辑
摘要: Condition Condition提供了一系列的方法来对阻塞和唤醒线程: await() :造成当前线程在接到信号或被中断之前一直处于等待状态。 await(long time, TimeUnit unit) :造成当前线程在接到信号、被中断或到达指定等待时间之前一直处于等待状态。 awaitN 阅读全文
posted @ 2018-09-25 20:07 一把水果刀 阅读(236) 评论(0) 推荐(0) 编辑
摘要: CyclicBarrier CyclicBarrier,一个同步辅助类,在API中是这么介绍的: 它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 其内部实现使用了Re 阅读全文
posted @ 2018-09-25 20:07 一把水果刀 阅读(127) 评论(0) 推荐(0) 编辑
摘要: ReentrantReadWriteLock 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时禁止其他线程读势必会导致性能降低。所以就提供了读写锁 阅读全文
posted @ 2018-09-25 20:06 一把水果刀 阅读(149) 评论(0) 推荐(0) 编辑
摘要: ReentrantLock 可重入锁 ReentrantLock,可重入锁,是一种递归无阻塞的同步机制。它可以等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 公平锁与非公平锁 ReentrantLoc 阅读全文
posted @ 2018-09-25 20:05 一把水果刀 阅读(395) 评论(0) 推荐(0) 编辑
摘要: CAS (Compare And Swap) (compare and swap, CAS),是原子操作的一种。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC 阅读全文
posted @ 2018-09-25 20:04 一把水果刀 阅读(273) 评论(0) 推荐(0) 编辑
摘要: ASQ(AbstractQueuedSynchronizer)队列同步器 虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制),但是它却缺少了获取锁与释放锁的可操作性,可中断、超时获取锁,且它为独占式在高并发场景下性能大打折扣。而ASQ,队列同步器是构建锁或者其他同步组件 阅读全文
posted @ 2018-09-25 20:03 一把水果刀 阅读(960) 评论(0) 推荐(0) 编辑
摘要: Double Check Lock(DCL) 通过单例模式生产类是程序员必会,它有很多写法,其中的懒汉式,及延迟生成类,应使用双重检查,否则就会出现生成多例: public class Singleton { private static Singleton singleton; private S 阅读全文
posted @ 2018-09-25 20:02 一把水果刀 阅读(3026) 评论(0) 推荐(1) 编辑
摘要: volatile关键字 synchronized是一个重量级的锁,虽然JVM对它做了很多优化,而下面介绍的volatile则是轻量级的synchronized。如果一个变量使用volatile,它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。 计算机在运行程序时, 阅读全文
posted @ 2018-09-25 20:00 一把水果刀 阅读(134) 评论(0) 推荐(0) 编辑