`

使用java实现的线程池 消息队列功能

 
阅读更多

ThreadPoolManager类:负责管理线程池,调用轮询的线程来访问字符串缓冲区的内容,维护缓冲区,当线程池溢出时抛出的Runnable任务被加入到字符缓冲区。

  public class ThreadPoolManager

  {

  private static ThreadPoolManager tpm = new ThreadPoolManager();

  // 线程池维护线程的最少数量

  private final static int CORE_POOL_SIZE = 4;

  // 线程池维护线程的最大数量

  private final static int MAX_POOL_SIZE = 10;

  // 线程池维护线程所允许的空闲时间

  private final static int KEEP_ALIVE_TIME = 0;

  // 线程池所使用的缓冲队列大小

  private final static int WORK_QUEUE_SIZE = 10;

  // 消息缓冲队列

  Queue msgQueue = new LinkedList();

  // 访问消息缓存的调度线程

  final Runnable accessBufferThread = new Runnable()

  {

  public void run()

  {

  // 查看是否有待定请求,如果有,则创建一个新的AccessDBThread,并添加到线程池中

  if( hasMoreAcquire() )

  {

  String msg = ( String ) msgQueue.poll();

  Runnable task = new AccessDBThread( msg );

  threadPool.execute( task );

  }

  }

  };

  final RejectedExecutionHandler handler = new RejectedExecutionHandler()

  {

  public void rejectedExecution( Runnable r, ThreadPoolExecutor executor )

  {

  System.out.println(((AccessDBThread )r).getMsg()+"消息放入队列中重新等待执行");

  msgQueue.offer((( AccessDBThread ) r ).getMsg() );

  }

  };

  // 管理数据库访问的线程池

  final ThreadPoolExecutor threadPool = new ThreadPoolExecutor(

  CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS,

  new ArrayBlockingQueue( WORK_QUEUE_SIZE ), this.handler );

  // 调度线程池

  final ScheduledExecutorService scheduler = Executors

  .newScheduledThreadPool( 1 );

  final ScheduledFuture taskHandler = scheduler.scheduleAtFixedRate(

  accessBufferThread, 0, 1, TimeUnit.SECONDS );

  public static ThreadPoolManager newInstance()

  {

  return tpm;

  }

  private ThreadPoolManager(){}

  private boolean hasMoreAcquire()

  {

  return !msgQueue.isEmpty();

  }

  public void addLogMsg( String msg )

  {

  Runnable task = new AccessDBThread( msg );

  threadPool.execute( task );

  }

  }

  public class AccessDBThread implements Runnable

  {

  private String msg;

  public String getMsg()

  {

  return msg;

  }

  public void setMsg( String msg )

  {

  this.msg = msg;

  }

  public AccessDBThread(){

  super();

  }

  public AccessDBThread(String msg){

  this.msg = msg;

  }

  public void run()

  {

  // 向数据库中添加Msg变量值

  System.out.println("Added the message: "+msg+" into the Database");

  }

  }

  public class TestDriver

  {

  ThreadPoolManager tpm = ThreadPoolManager.newInstance();

  public void sendMsg( String msg )

  {

  tpm.addLogMsg( msg + "记录一条日志 " );

  }

  public static void main( String[] args )

  {

  for( int i = 0; i <100; i++ )

  {

  new TestDriver().sendMsg( Integer.toString( i ) );

分享到:
评论

相关推荐

    Java实现的线程池、消息队列功能

    标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...

    java 线程池实现多并发队列后进先出

    Java线程池是一种高效管理并发任务的机制,它允许开发者预先配置一定数量的线程,以便在处理多个并发任务时能有效地复用这些线程,从而避免了频繁创建和销毁线程带来的开销。在Java中,`java.util.concurrent`包下的...

    线程池&&队列各类区别使用场景

    - **双端队列(Deque)**:支持两端插入和删除,可以作为栈或队列使用。 选择队列主要依据任务的执行顺序需求和线程之间的协作方式。例如,生产者-消费者模型中,阻塞队列能很好地协调生产者和消费者的速率。 ...

    Java利用Redis实现消息队列的示例代码

    * Java可以使用Message类来实现消息队列的存储和取出。 五、应用场景 * 消息队列可以应用于多种场景,如异步处理、任务队列、消息中间件等。 * 消息队列可以提高系统的可扩展性和可靠性。 六、为什么选择Redis *...

    并发-线程池和阻塞队列.pdf

    但在使用时,必须根据具体的业务场景和性能需求,仔细设计线程池的大小、线程数和队列类型,以及线程间协作的具体实现方式,才能达到最佳的性能效果。在实际开发中,合理配置和使用线程池和阻塞队列是提升程序稳定性...

    java.util.concurrent 实现线程池队列

    本篇文章将深入探讨如何使用`java.util.concurrent` 实现线程池队列,以及其中的关键概念和技术。 线程池是一种线程使用模式,通过预先创建并维护一定数量的工作线程来避免频繁创建和销毁线程的开销。在Java中,`...

    Android中的线程池与任务队列

    线程池和任务队列是实现这一目标的关键工具。本文将深入探讨Android中线程池与任务队列的概念、工作原理以及它们如何协同工作。 线程池(ThreadPool)是一种多线程处理形式,处理过程中将任务添加到队列,然后在...

    自定义实现Java线程池

    ### 自定义实现Java线程池 #### 一、概述 在深入探讨自定义Java线程池之前,我们先简要回顾一下线程池的基本概念及其重要性。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动...

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    总结来说,自定义Java线程池的实现涉及到线程的管理和调度,包括核心线程的维护、任务队列的使用以及拒绝策略的设定。理解这些机制有助于我们更好地优化并发程序,提高系统效率。然而,在实际开发中,通常推荐使用...

    Java版线程池实现

    Java线程池是一种高效管理并发任务执行的机制,它通过预先创建并维护一定数量的线程,从而避免了频繁地创建和销毁线程所带来的性能开销。在Java中,线程池的实现主要依赖于`java.util.concurrent`包中的`...

    JAVA经典线程池源码

    本资源包含了一个经典的Java线程池实现,适用于大型项目,能帮助开发者理解并应用线程池技术。 线程池的概念源于操作系统中的进程池,其核心思想是减少创建和销毁线程的开销,通过复用已存在的线程来提高系统效率。...

    java线程池封装j

    Java线程池由`java.util.concurrent`包中的`ExecutorService`接口和其子类实现。其中,最常用的是`ThreadPoolExecutor`类,它提供了丰富的参数用于定制线程池的行为。线程池的核心组件包括: - **核心线程数...

    java多线程加队列上传文件_后台处理

    本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时利用队列结构来协调任务的调度与执行。 #### 关键技术...

    Java线程池使用说明

    通过合理使用Java线程池,开发者可以更加高效地管理线程资源,提高应用程序的性能和稳定性。线程池的使用也应当注意避免资源竞争、线程死锁以及可能的内存泄漏等问题,确保线程安全和高效的并行处理能力。

    java线程池工作队列饱和策略代码示例

    在本文中,我们将详细介绍Java线程池工作队列饱和策略的概念、原理和实现。 线程池(Thread Pool)是并行执行任务收集的实用工具。随着CPU引入适合于应用程序并行化的多核体系结构,线程池的作用正日益显现。通过...

    并发-线程池和阻塞队列

    在Java编程中,"并发-线程池和...总之,理解和掌握线程池与阻塞队列的原理和使用方法,是提升Java并发编程能力的重要一步。它们为开发人员提供了一种强大而灵活的工具,能够在处理并发问题时保证系统的稳定性和性能。

    Java 线程池的原理与实现

    理解Java线程池的原理和实现,可以帮助我们更有效地管理并发任务,提升系统性能,同时避免资源浪费和线程安全问题。在实际开发中,合理配置线程池参数,结合业务场景选择合适的线程池类型,是优化系统性能的关键步骤...

    java 四种线程池实例

    总之,Java线程池提供了一种强大的工具来管理和优化并发任务的执行,理解并熟练使用各种线程池实例能够显著提升程序的效率和可维护性。在设计系统时,应该充分考虑线程池的选择和配置,以适应不同类型的异步任务需求...

Global site tag (gtag.js) - Google Analytics