线程池
文章平均质量分 82
牛奋lch
我是一只快乐的程序猿……
展开
-
spring+ActiveMQ+JMS+线程池实现简单的分布式,多线程,多任务的异步任务处理系统
前言:随着系统的业务功能不断增强,传统的单机、单任务,单线程的运行模式已经逐渐的被淘汰,取而代之的是分布式,多任务,多线程,当然,现在开源的这方面的框架也非常的多,大概的思想也都类似,下面就结合我这一年多的工作心得,分享一个简单易实现的分布式,多任务,多线程的异步任务处理系统的基本实现。1.系统部署图该系统主要由3部分构成,任务生产者集群,消息中间件集群,任务消费者集群,下面来分别说下原创 2016-08-26 11:11:20 · 11475 阅读 · 58 评论 -
使用数据库模拟状态机实现乐观锁
最近遇到了一个问题,有一个定时任务:例如定时从数据库中查询所有的待执行的任务,然后执行。为了提高整个程序的效率,我们使用了线程池,但是在实际的测试中,却发现了一个问题,如果线程池的线程数为5,那么这个定时任务就会被执行5次,也就是说,本来只希望只执行一次的,但是却重复执行了。那么怎么保证线程池中只有一个线程执行这个定时任务了,当然解决的方案有很多,例如使用Redis或zookeeper加全局锁等,原创 2017-05-09 15:03:05 · 2780 阅读 · 0 评论 -
java并发编程系列之Exchanger的使用
我们在看香港的警匪片的时候,经常会有这种画面,毒贩和贩毒的人,会先约定某个地点,然后进行一手交钱一手交白粉的勾当,其实这种场景使用jdk1.5并发包中的Exchanger类也可以实现,下面我们就用一个简单的示例,来模拟下这种场景,示例代码如下:public class ExchangeDemo { public static void main(String[] args) { // 新原创 2016-12-09 15:46:59 · 1478 阅读 · 1 评论 -
java并发编程系列之CountDownLatch的使用
说到定时器,我们就会想到java中的Timer。在jdk1.5中,也提供了一个类似定时器功能的类CountDownLatch,只不过两者有些区别,CountDownLatch类同一时刻只能由一个线程去操作也就是说,在多线程并发下,同时只能由其中的一个线程去操作这个计时器。CountDownLatch 的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下原创 2016-12-09 15:42:37 · 718 阅读 · 0 评论 -
java并发编程系列之CyclicBarrier的使用
在日常活动中,经常会遇到这样一种场景:我们会约定在某个地点集合,等所有的组员都集合后,然后我们才开始活动,等活动结束后,所有的组员再一次集合,报道后再各自回家。在我们的程序中,也会经常遇到这种场景,需要所有的子线程都结束之后,再汇聚所有的结果,然后根据结果在决定下一步的操作,这个时候,我们就需要使用CyclicBarrier,进行线程的同步。下面先看一个简单的示例,代码如下:public cl原创 2016-12-09 15:38:25 · 663 阅读 · 0 评论 -
java并发编程系列之Semaphore信号量的使用
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施, 它负责协调各个线程, 以保证它们能够正确、合理的使用公共资源。一个计数信号量,从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用原创 2016-12-09 15:34:23 · 4675 阅读 · 0 评论 -
java并发编程系列之Condition的使用
Condition是做什么用的了?Condition是用来实现线程间通信的,说到这,可能很多人都想到了wait和notify以及notifyAll,没错,Condition的功能和他们类似,只是功能更强而已,下面我们就来学习一下线程间通过Condition来实现通信。Condition也是jdk1.5并发包下的一个接口,原型如下:public interface Condition {原创 2016-12-09 15:31:34 · 593 阅读 · 0 评论 -
java并发编程系列之Callable与Future的应用
在我们传统的观念中,创建线程无非就两种方式:1、直接new 一个Thread;2、实现Runnable,其实这两种方式的实质是一样的,有一个共同的特点:无返回值,并且无法抛出返回结果的异常,顺便我们讲一下其他的线程创建方式。那我们想拿到线程的返回值,怎么做了?我们可以使用java并发包中的Callable和Future来实现。下面就来分享一下实现方式。1、Callable接口Callabl原创 2016-12-09 15:27:32 · 596 阅读 · 0 评论 -
java并发编程系列之ReadWriteLock读写锁的使用
前面我们讲解了Lock的使用,下面我们来讲解一下ReadWriteLock锁的使用,顾明思义,读写锁在读的时候,上读锁,在写的时候,上写锁,这样就很巧妙的解决synchronized的一个性能问题:读与读之间互斥。ReadWriteLock也是一个接口,原型如下:public interface ReadWriteLock { Lock readLock(); Lock w原创 2016-12-09 15:20:21 · 15585 阅读 · 6 评论 -
java并发编程系列之Lock的使用
Jdk1.5中,在java.util.concurrent.locks包下,有一组实现线程同步的接口和类,说到线程的同步,很多立马就会想到synchronized关键字,这是java内置的关键字,用来处理线程同步的,但这个关键字有很多的缺陷,使用起来也不是很方便和直观,所以就出现了Lock,下面,我们就来对比着讲解Lock。synchronized关键字:该关键字在使用的过程中会有如下几个原创 2016-12-09 15:11:50 · 734 阅读 · 0 评论 -
使用线程池实现异步打日志和存库的任务调度
最近项目中有一个需求,在每一个接口的入口处都要打日志,并且打出来的日志是要xml格式的报文。刚接到这个需求的时候,也没多想,就直接使用spring的aop实现了这个需求,但在后面的性能测试中,却遇到了一个致命的问题:由于我们接口之间是使用Bean来进行消息传递的,如果每个接口的入口都要打日志,并且要是xml格式的,那么我们都需要进行一次xml转换,就是因为这一步转换,将我们的性能大大的降低,打个比原创 2016-07-27 09:49:08 · 6072 阅读 · 0 评论 -
jdk自带线程池详解
一、前言在最近做的一个项目中,需要大量的使用到多线程和线程池,下面就java自带的线程池和大家一起分享。二、简介多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力,但频繁的创建线程的开销是很大的,那么如何来减少这部分的开销了,那么就要考虑使用线程池了。线程池就是一个线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额原创 2016-07-27 09:17:48 · 15019 阅读 · 2 评论 -
java中的阻塞队列
Java中的阻塞队列一、什么是阻塞队列所谓的阻塞队列,指的是:如果当前队列为空,那么获取元素的线程就会被阻塞,处于等待状态,直到队列变为非空;如果当前队列满的时候,添加元素的线程就会被阻塞,处于等待状态,直到队列有存储空间。阻塞队列是一个经典的生产者-消费者模式,生产者不停的往队列里面添加元素,消费者不停的从队列消费元素。阻塞队列就是实现生产者-消费者模式借助的第三方,很多时候,我们找到这原创 2016-07-27 09:36:37 · 1059 阅读 · 0 评论 -
spring boot-执行Async任务时,使用自定义的线程池
在前面的博客中,http://blog.csdn.net/liuchuanhong1/article/details/54605697 我们使用了spring boot的异步操作,当时,我们使用的是默认的线程池,但是,如果我们想根据项目来定制自己的线程池了,下面就来说说,如何定制线程池!一、增加配置属性类package com.chhliu.springboot.async.con...原创 2017-03-20 20:16:01 · 34929 阅读 · 6 评论