`

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

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

文章来自中国建站:http://www.jz123.cn/text/0127908.html



package com.abin.message.line;

import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

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);
}
}














package com.abin.message.line;

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");
}
}













package com.abin.message.line;

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`包下的...

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

    线程池的类型有很多种,常见的有Java的ExecutorService,它提供了固定大小、可缓存、单线程和定时任务等不同的实现。选择合适的线程池类型要考虑如下因素: - **工作负载**:任务是CPU密集型还是IO密集型?CPU密集...

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

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

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

    Java中的ArrayBlockingQueue和LinkedBlockingQueue都是典型的阻塞队列实现。 阻塞队列为线程间通信提供了便捷的机制,可以用来协调多个线程的运行,防止多线程直接访问共享资源导致的并发问题。例如,生产者-消费者...

    Android中的线程池与任务队列

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

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

    Java利用Redis实现消息队列的示例代码 以下是Java利用Redis实现消息队列的示例代码的知识点总结: 一、序列化 * 序列化是将对象转换为byte数组的过程,Java中可以使用ByteArrayOutputStream和...

    自定义实现Java线程池

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

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

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

    JAVA经典线程池源码

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

    Java版线程池实现

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

    java线程池封装j

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

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

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

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

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

    并发-线程池和阻塞队列

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

    Java 线程池的原理与实现

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

    java 线程池常用方法

    Java线程池是Java并发编程中的重要组成部分,它在Java 5及后续版本中引入,大大简化了线程管理和资源调度。线程池通过`Executor`接口和`ExecutorService`接口提供了一套强大的机制,允许开发者高效地创建、管理和...

    JVM优先级线程池做任务队列的实现方法

    JVM优先级线程池做任务队列的实现方法是指在Java虚拟机(JVM)中使用线程池来管理和执行任务队列的方法。这种方法可以将任务按照优先级排队,并且可以根据实际情况动态调整线程池的大小,从而提高系统的并发处理能力...

Global site tag (gtag.js) - Google Analytics