多线程
tobearc
这个作者很懒,什么都没留下…
展开
-
可以阻塞放入的线程池
java.util.concurrent.Executors为我们提供了多种构造线程池的方法,可以构造多种类型的线程池对象,可以满足多种业务需求。但是并没有提供一个可以阻塞放入的线程池,业务场景描述如下:我们有个任务表,任务会自动增加。我们需要多线程来处理任务表的任务,主线程一次取出50个任务,然后放入线程池处理,如果使用普通的线程池,取出任务马上就放进了线程池队列,如果任务过多,可能会导...原创 2019-02-15 22:56:28 · 1451 阅读 · 1 评论 -
阻塞队列之LinkedBlockingQueue
LinkedBlockingQueue特点:1、数据结构:单向链表;2、有界队列,默认长度为:Integer.MAX_VALUE;3、和ArrayBlockingQueue一样,不允许放入空值;4、元素按FIFO排序;对比ArrayBlockingQueue:1、存储结构不同,ArrayBlockingQueue 采用对象数组存储数据;LinkedBlockingQueue...原创 2019-02-21 22:37:56 · 970 阅读 · 0 评论 -
深入浅出Java线程池
使用线程池的好处:1、线程可以复用,减少创建、销毁线程的资源开销;2、避免创建线程,提高效率;3、便于对线程统一管理、监控等。大神Doug Lea为我们提供了多种构建线程池的方法:1、直接构造ThreadPoolExecutor对象源码分析: //构造方法1:使用默认的线程工厂,默认的拒绝策略(中止策略,直接抛RejectedExecutionException) pu...原创 2019-02-16 18:26:24 · 927 阅读 · 0 评论 -
Java提供的阻塞队列
Doug Lea大师为我们提供了多种阻塞队列,其中有:ArrayBlockingQueue--数组构成的有界阻塞队列LinkedBlockingQueue--链表构成的有界阻塞队列PriorityBlockingQueue--支持优先级排序的无界阻塞队列DealyQueue--使用优先级队列构建的无界阻塞队列SynchronousQueue--一个不存储元素的阻塞队列Lin...原创 2019-02-18 23:22:04 · 869 阅读 · 0 评论 -
阻塞队列之ArrayBlockingQueue
1、ArrayBlockingQueue特点:a、底层数据结构是数组,Object[];b、插入、读取操作都有加锁,线程安全;c、有界队列,必须指定容量;d、支持公平锁和非公平锁,构造参数可以指定;2、常用方法及特点2.1、构造方法 //构造1:仅指定容量 public ArrayBlockingQueue(int capacity) { ...原创 2019-02-19 23:16:56 · 921 阅读 · 0 评论 -
阻塞队列之DelayQueue
特点1、内部队列基于PriorityQueue,其要求放入的元素不能为null2、放置在内的对象,只有满足条件:到期 且 排在队列出口的 才能取出3、放置在内的对象必须实现Delayed接口,该接口有个getDelay方法,用于判断是否到达执行时间示例代码/** * DelayQueue 可以延时取出的队列 * 注意: * 内部元素必须实现接口: Delayed...原创 2019-03-05 22:38:35 · 837 阅读 · 0 评论 -
阻塞队列之PriorityBlockingQueue
PriorityBlockingQueue特点:1、可以指定内部元素的排序规则(即出队规则),即实现该接口的对象:java.util.Comparator<T>;2、内部数据结构是对象数据组,Object[] queue;3、默认长度:11,最大长度:Integer.MAX_VALUE - 8;4、不支持放入空值,会抛异常:NullPointerException...原创 2019-02-26 23:22:05 · 955 阅读 · 0 评论 -
线程安全之Runnable多实例和单实例
多个线程访问共享变量,会导致线程安全问题,导致共享变量值被非预期改变。那么什么情况会导致共享变量存在呢?1、类的静态变量2、多个线程,单个Runable实例,其内部全局变量是共享的本文主要说明Runnable多实例和单实例(即:上述第2点)的区别及可能产生的问题,详细见代码及注释。import java.util.concurrent.TimeUnit;/** * *...原创 2019-03-11 23:57:55 · 1290 阅读 · 2 评论