随笔分类 -  JUC学习笔记

JUC
摘要:线程池本质的概念就是一堆线程一起完成一件事情。 Executor ExecutorService ScheduledExecutorService Executors 线程池分类 创建线程池使用类:java.util.concurrent.Executors 创建无大小限制的线程池 public s 阅读全文
posted @ 2018-06-11 09:48 iTermis 阅读(444) 评论(0) 推荐(0) 编辑
摘要:所谓的延迟队列最大的特征是它可以自动通过队列进行脱离,例如:现在有一些对象被临时保存着,但是有可能该集合对象是一个公共对象,那么里面的某些数据如果不在使用的时候就希望其可以在指定的时间达到后自动的消失。 DelayQueue是延迟队列主要的使用类,所谓的延迟队列其实就是=BlockingQueue+ 阅读全文
posted @ 2018-06-04 15:32 iTermis 阅读(626) 评论(0) 推荐(0) 编辑
摘要:Queue是一个队列,而队列的主要特征是FIFO先进先出,要实现生产者与消费者模型,也可以采用队列来进行中间的缓冲读取,好处是:生产者可以一直不停歇的生产数据。 BlockingQueue是Queue的子类,它实现有队列的基本特征: 在最初利用Queue实现生产者与消费者模型的时候发现一个问题:所有 阅读全文
posted @ 2018-06-04 14:23 iTermis 阅读(306) 评论(0) 推荐(0) 编辑
摘要:如果要进行多个数据的保存,无疑首选类集(List、Set、Queue、Map),在类集的学习的时候也知道一个概念:许多集合的子类都具有同步与异步的差别,但是如果真的要在多线程之中去使用这些类,是否真的可以用呢? 范例:观察一下类集的问题: 不过很遗憾的是这个时候以上的代码出现了“java.util. 阅读全文
posted @ 2018-05-21 11:40 iTermis 阅读(470) 评论(0) 推荐(0) 编辑
摘要:Exchanger交换空间 如果现在有两个线程,一个线程负责生产数据,另外一个线程负责消费数据,那么这个两个线程之间一定会存在一个公共的区域,那么这个区域的实现在JUC包之中称为Exchanger。 java.util.concurrent.Exchanger类表示一种两个线程可以进行互相交换对象的 阅读全文
posted @ 2018-05-11 16:01 iTermis 阅读(659) 评论(0) 推荐(0) 编辑
摘要:锁的机制从整体的运行转态来讲核心就是:阻塞,解除阻塞,但是如果仅仅是这点功能,那么JUC并不能称为一个优秀的线程开发框架,然而是因为在juc里面提供了大量方便的同步工具辅助类。 Semaphore信号量 Semaphore通常用于限制可以访问某些资源(物理or逻辑)的线程数目。 例如,大家排队去银行 阅读全文
posted @ 2018-05-11 11:51 iTermis 阅读(2427) 评论(0) 推荐(2) 编辑
摘要:java.util.concurrent.locks.LockSupport这个是一个独立的类,这个类的主要功能是用来解决Thread里面提供的suspend()(挂起线程)、resume()(恢复运行)方法,这个两个方法的本质上会存在有死锁的嫌疑,所以从JDK1.4开始将其就已经列为不建议使用的方 阅读全文
posted @ 2018-05-07 17:17 iTermis 阅读(273) 评论(0) 推荐(0) 编辑
摘要:在进行锁处理的时候还有一个接口:Condition,这个接口可以由用户来自己进行锁的对象创建。 Condition的作用是对锁进行更精确的控制。 Condition的await()方法相当于Object的wait()方法,Condition的signal()方法相当于Object的notify()方 阅读全文
posted @ 2018-05-03 18:34 iTermis 阅读(369) 评论(0) 推荐(0) 编辑
摘要:读写锁简介 所谓的读写锁值得是两把锁,在进行数据写入的时候有一个把“写锁”,而在进行数据读取的时候有一把“读锁”。 写锁会实现线程安全同步处理操作,而读锁可以被多个对象读取获取。 读写锁:ReadWriteLock 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由JVM自己控制的。 R 阅读全文
posted @ 2018-04-27 14:19 iTermis 阅读(664) 评论(0) 推荐(0) 编辑
摘要:ReentrantLock简介 ReentrantLock是一个可重复的互斥锁,又被称为独占锁,可重入的意思是:ReentrantLock锁可以被单个线程多次获取。但是在同一个时间点只能被一个线程锁持有 ReentrantLock使用一个FIFO(先进先出)的等待队里来管理获取该锁所有线程的。 Re 阅读全文
posted @ 2018-04-27 10:05 iTermis 阅读(305) 评论(0) 推荐(0) 编辑
摘要:锁处理机制简介 juc的开发框架解决的核心问题是并发访问和数据安全操作问题,当进行并发访问的时候如果对于锁的控制不当,就会造成死锁这样的阻塞问题。 为了解决这样的缺陷,juc里面重新针对于锁的概念进行了设计。 JUC锁机制 JUC锁机制包括以下几个组成部分: 核心接口:Lock,ReadWriteL 阅读全文
posted @ 2018-04-26 11:09 iTermis 阅读(1585) 评论(0) 推荐(0) 编辑
摘要:ThreadFactory线程工厂类 在默认情况下如果要想创建一个线程类对象,大部分情况的选择是:直接通过子类为父类进行实例化,利用Runnable子类为Runnable接口实例化。 或者直接调用Lambda表达式来进行处理,不过在多线程运行机制里面考虑到线程对象创建的合理性,juc专门提供了一个T 阅读全文
posted @ 2018-04-25 09:41 iTermis 阅读(437) 评论(0) 推荐(0) 编辑
摘要:原子类操作 既然强调了并发访问,那么就必须考虑操作系统位数:32位操作系统还是64位操作系统,对于long型数据类型而言,是64位的。但是如果现在项目运行在32位系统上,则long型数据会占用32位空间进行数据的保存。 如果现在每一个程序类里面都去使用long类型,那么进行处理的时候都需要手动进行v 阅读全文
posted @ 2018-04-24 17:05 iTermis 阅读(344) 评论(0) 推荐(0) 编辑
摘要:TimeUnit工具类 在java.util.concurrent开发包里面提供有一个TimeUnit类,这个类单独看它的描述是一个时间单元类。该类是一个枚举类,这也是juc开包里面唯一的一个枚举类。 这个类之中支持有:日(DAYS)、时(HOURS)、分(MINUTS)、秒(SECONDS)、毫秒 阅读全文
posted @ 2018-04-24 13:55 iTermis 阅读(584) 评论(0) 推荐(0) 编辑
摘要:前言 JUC是Java5.0开始提供的一组专门实现多线程并发处理的开发框架,利用JUC开发架构可以有效的解决实际线程项目开发之中出现的死锁、阻塞、资源访问与公平机制。 此笔记主要记录java.util.concurrent开发包之中的各个核心组成类的使用、操作原理分析,并且通过具体的实际代码对多线程 阅读全文
posted @ 2018-04-24 13:39 iTermis 阅读(918) 评论(0) 推荐(0) 编辑