
多线程
程序员开心鸭
这个作者很懒,什么都没留下…
展开
-
JAVA多线程 生产者消费者模式及实现方法
1 生产者消费者模式首先来了解什么是生产者消费者模式。该模式也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者...转载 2018-07-02 12:21:07 · 849 阅读 · 0 评论 -
阿里学习总结-创建线程池的方法
曾经创建线程池通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。...原创 2019-08-18 12:52:06 · 1675 阅读 · 0 评论 -
多线程知识点一
1、创建线程的2种方式: 一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 2、Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。 2.1、Callable Calla...原创 2019-05-13 11:28:46 · 217 阅读 · 0 评论 -
多线程知识------synchronized
synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。 synchronized取得的锁都是对象;每个对象只有一个锁(lock)与之相关联;实现同步是...原创 2019-05-14 19:57:50 · 252 阅读 · 0 评论 -
多线程知识点二 volatile关键字
volatile修饰的变量,保证了每次读取到的都是最新的那个值。线程安全围绕的是可见性和原子性这两个特性展开的,volatile解决的是变量在多个线程之间的可见性,但是无法保证原子性。 public class MyThread28 extends Thread { private boolean isRunning = true; public boolean...原创 2019-05-14 18:20:51 · 203 阅读 · 0 评论 -
java最简单的定时任务配置,以及TIMER定时器的问题
想起写定时任务,很多码农都第一时间想起quartz。当然本人平时定时任务定时任务的时候也是用quartz,因为实用简单。最近在写项目的时候遇到一个问题。因为项目的限制性和保密协议,只能说不能再pom.xml文件加上包的引用。所以是无法使用quartz定时任务了。当时第一时间就想起使用java.util包下的TIMER定时器来执行定时任务。 先说timer定时器的使用,非常简单。 1、写一个be...原创 2019-03-21 16:42:43 · 472 阅读 · 0 评论 -
SPRING中的线程池ThreadPoolTaskExecutor
一、初始化 1,直接调用 ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor(); //线程池所使用的缓冲队列 poolTaskExecutor.setQueueCapacity(200); //线程池维护线程的最少数量 poolTaskExecutor.setCorePoolS...转载 2018-09-10 18:13:18 · 1333 阅读 · 0 评论 -
多线程:生产者和消费者模式假死现象(注意问题)
生产者和消费者模式假死现象生产者/消费者模型最终达到的目的是平衡生产者和消费者的处理能力,达到这个目的的过程中,并不要求只有一个生产者和一个消费者。可以多个生产者对应多个消费者,可以一个生产者对应一个消费者,可以多个生产者对应一个消费者。假死就发生在上面三种场景下。理论分析就能说明问题,所以就不写代码了。代码要写也很简单,上面的两个例子随便修改一个,开一个生产者线程/多个消费者线程、开多个生产者线...原创 2018-07-03 17:47:09 · 1911 阅读 · 4 评论 -
Java多线程:Queue、BlockingQueue以及利用BlockingQueue实现生产者/消费者模型
Queue是什么队列,是一种数据结构。除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的。无论使用哪种排序方式,队列的头都是调用remove()或poll()移除元素的。在FIFO队列中,所有新元素都插入队列的末尾。 Queue中的方法Queue中的方法不难理解,6个,每2对是一个也就是总共3对。看一下JDK API就知道了:注意一点就好,Queue通常不允许...转载 2018-07-03 16:03:29 · 243 阅读 · 0 评论 -
synchronized与Lock的区别与使用
1、synchronized是关键字,就和if...else...一样,是语法层面的实现,因此synchronized获取锁以及释放锁都是Java虚拟机帮助用户完成的;ReentrantLock是类层面的实现,因此锁的获取以及锁的释放都需要用户自己去操作。特别再次提醒,ReentrantLock在lock()完了,一定要手动unlock() 2、synchronized简单,简单意味着不灵活,而...原创 2018-07-02 17:09:47 · 364 阅读 · 0 评论 -
多线程使用相关知识总结-队里Queue
队列的原理 queue 队列容器是一个先进先出(First In First Out,FIFO)的线性存储表,元素的插入只能在队尾,元素的删除只能在队首,如图是一个队列容器数据结构示意图。 在Java中,Queue是一个接口,它的实现类有很多,其中非线程安全的代表是LinkedList,线程安全的有阻塞和非阻塞的,阻塞的大都实现了Queue的子接口BlockingQueue(阻塞队列)...转载 2019-08-18 12:59:31 · 186 阅读 · 0 评论