什么是线程池?为什么要用线程池? 1、降低资源的消耗。降低线程创建和销毁的资源消耗; 2、提高响应速度:线程的创建时间为T1,执行时间T2,销毁时间T3,免去T1和T3的时间 3、提高线程的可管理性。 实现一个我们自己的线程池 1、 线程必须在池子已经创建好了,并且可以保持住,要有容器保存多个线程; ...
分类:
编程语言 时间:
2020-01-08 22:44:59
阅读次数:
87
class MyResource { private volatile boolean FLAG = true; //默认开启,进行生产+消费 private AtomicInteger atomicInteger = new AtomicInteger(); BlockingQueue<Strin ...
分类:
编程语言 时间:
2020-01-06 00:36:19
阅读次数:
108
一.说说Java创建多线程的方法 1. 通过继承Thread类实现run方法 2. 通过实现Runnable接口 3. 通过实现Callable接口 4. 通过线程池获取 二. 可以写一个Callable的案例吗?如何调用Callable接口 三. 请你谈谈对阻塞队列的理解,为什么要是用阻塞队列,它 ...
分类:
编程语言 时间:
2020-01-05 00:00:37
阅读次数:
134
一. 请你谈一谈synchronized和lock有什么区别? 1.synchronized是java的关键字,属于jvm层面,底层是通过moninter对象实现的.Lock是具体的接口,属于api层面. 2.synchronized不需要用户去手动释放锁,当synchronized的代码执行完成后 ...
分类:
其他好文 时间:
2020-01-01 23:54:11
阅读次数:
94
并发编程 核心: 并发,进程,线程,协程 并发与并行 并发:是伪并行,即看起来是同时运行。单个cpu+多道技术就可以实现并发并行:同时运行,只有具备多个cpu才能实现并行补充: 多道技术实现了单核下实现并发 同步 、异步 | 阻塞、非阻塞 同步 、异步: 是指任务提交的方式 同步:提交任务后原地等待 ...
分类:
其他好文 时间:
2019-12-22 14:29:17
阅读次数:
67
1、五种阻塞队列介绍 ArrayBlockingQueue 有界队列,底层使用数组实现,并发控制使用ReentrantLock控制,不管是插入操作还是读取操作,都需要获取锁之后才能执行。 LinkedBlockingQueue 底层基于单向链表实现,既可以当做有界队列,也可以当做无界队列使用。使用两 ...
分类:
编程语言 时间:
2019-12-18 23:34:53
阅读次数:
125
public class PriorityBlockingQueueTest { /** * 有优先级顺序的阻塞队列,底层实现是数组,无边界。默认是11. * 构造方法可以传入一个比较器,不传的话,默认是按照字典排序比较大小 * 向队列中插入元素用 add offer , put 三个方法效果是等同 ...
分类:
其他好文 时间:
2019-12-15 23:49:22
阅读次数:
115
线程 1,生产者消费者模型 1. 什么是生产者与消费者模型 生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题,生产者和消费者之间不直接通讯,而通过阻塞队列来通讯,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力 在并发编程中使用生产者和消费者模式能够解决大多数并发问题,该模式 ...
分类:
编程语言 时间:
2019-12-13 13:46:51
阅读次数:
89
前言 上篇已经分析了lock和concurrent提供的集合类包括阻塞队列和容器类。这里我们来介绍 Executor框架线程池的作用 线程池作用就是限制系统中执行线程的数量。根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制... ...
分类:
其他好文 时间:
2019-12-12 23:35:48
阅读次数:
108
概念阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。应用阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生 ... ...
分类:
编程语言 时间:
2019-12-12 01:14:35
阅读次数:
93