- 浏览: 1493212 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (523)
- JAVA (334)
- J2EE (18)
- JSP (21)
- JavaScript (14)
- it life (2)
- mobile develop (4)
- UBUNTU (14)
- Algorithm (14)
- DataBase (56)
- Browser/Server (1)
- linux (6)
- fedora (2)
- CSS (1)
- AjAX (3)
- HTML5 (1)
- EJB (1)
- osworkflow (2)
- Java face (5)
- spring (4)
- ICE (1)
- webService (2)
- MongoDB (1)
- JavaThread (4)
- JavaCollections (3)
- Hibernate (2)
- JavaMail (1)
- JavaBasic (1)
- Cache (1)
- https (4)
- DOM4J (1)
- JDOM (0)
- Mybatis (1)
- JUNIT (1)
- eclipse (1)
- easyMock (2)
最新评论
-
yadongliang:
...
自己认为的一些技术点 -
yadongliang:
每次看你头像都看的荷尔蒙分泌失调
WebService的两种方式SOAP和REST比较 (转) -
yadongliang:
hollo 写道一直有这种感觉,盲目的跟风,确实有一些人为了潮 ...
WebService的两种方式SOAP和REST比较 (转) -
welss:
博主,JNative怎么调用dll中的这种方法: int ...
JNative调用DLL -
Java_Antelope:
session.setAttribute和session.getAttribute(
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));
}
}
}
文章来自中国建站: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));
}
}
}
发表评论
-
Spring官网改版后下载
2014-04-11 10:39 767Spring官网改版后找了好久都没有找到直接下载Jar包的链接 ... -
Java 系统架构设计
2014-03-31 21:18 1479首先分为网关和引擎等多个部分: 第一部分:网关 1、主要负责转 ... -
Java 提高系统性能
2014-03-03 22:22 2610首先是从三方面来提高的,应用层面,服务器端层面,数据库层面。 ... -
2013年11月份艺龙旅行网面试题
2013-11-22 23:39 12611.给你两个字符串s1="abc",s2= ... -
国猪555555555
2013-11-22 00:16 1091国足第一招:场地太差,不适应。 国足第二招:场地太好,不适应。 ... -
自己认为的一些技术点
2013-08-14 00:12 12271.rest风格的编程。 2.memcached的命中率低的问 ... -
HttpClient
2013-01-14 23:57 1046package org.abin.lee.test.http; ... -
JAVA单例模式读取properties配置文件
2012-12-16 01:12 2660前段时间出差去做一个数据接口的项目,有很多参数需要从工程中的配 ... -
Java 反射调用方法
2012-10-22 23:52 975package lc.abin.lee.reflect; i ... -
Java Https单向,双向验证
2012-09-23 22:47 3007https一般来说有单项SSL和双向SSL连接之分。 单项 ... -
Java中的transient,volatile和strictfp关键字
2012-09-12 18:00 830http://www.iteye.com/topic/5295 ... -
Server JBoss v5.0 at localhost was unable to start within 50 seconds.
2012-09-05 11:35 1879[标题]:[转]JBoss was unable to sta ... -
HttpUrlConnection 开发例子
2012-03-25 16:23 3357/*** * * 发送HTTP请求 * @ ... -
Java Enum类型定义的方法
2012-03-12 12:34 2341//枚举接口 package com.abin.info.s ... -
Rational Rose 2003 下载及破解方法
2012-03-06 12:49 1390FROM:http://blog.csdn.net/fengl ... -
使用Spring进行面向切面(AOP)编程
2012-02-22 10:35 23431.aop理论知识 横切性关注点:对哪些方法拦截,拦截后怎么处 ... -
BASE64、MD5、SHA、HMAC几种加密算法
2012-02-21 12:53 8802BASE64编码算法不算是真正的加密算法。 MD5、 ... -
文本文件和二进制文件区别及java中字节流和字符流归纳
2012-02-17 15:48 2989首先在物理上文本文件和二进制文件并没有区别,都是以二进制01的 ... -
Java 字节流转化为文件
2012-02-17 15:46 5741已知:byte[] bytes=new FileToBytes ... -
Java核心之Java内存分配原理
2012-02-17 13:40 951JAVA内存分配与管理是Java的核心技术之一,之前我们曾介绍 ...
相关推荐
标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...
Java线程池是一种高效管理并发任务的机制,它允许开发者预先配置一定数量的线程,以便在处理多个并发任务时能有效地复用这些线程,从而避免了频繁创建和销毁线程带来的开销。在Java中,`java.util.concurrent`包下的...
线程池的类型有很多种,常见的有Java的ExecutorService,它提供了固定大小、可缓存、单线程和定时任务等不同的实现。选择合适的线程池类型要考虑如下因素: - **工作负载**:任务是CPU密集型还是IO密集型?CPU密集...
本篇文章将深入探讨如何使用`java.util.concurrent` 实现线程池队列,以及其中的关键概念和技术。 线程池是一种线程使用模式,通过预先创建并维护一定数量的工作线程来避免频繁创建和销毁线程的开销。在Java中,`...
Java中的ArrayBlockingQueue和LinkedBlockingQueue都是典型的阻塞队列实现。 阻塞队列为线程间通信提供了便捷的机制,可以用来协调多个线程的运行,防止多线程直接访问共享资源导致的并发问题。例如,生产者-消费者...
线程池和任务队列是实现这一目标的关键工具。本文将深入探讨Android中线程池与任务队列的概念、工作原理以及它们如何协同工作。 线程池(ThreadPool)是一种多线程处理形式,处理过程中将任务添加到队列,然后在...
Java利用Redis实现消息队列的示例代码 以下是Java利用Redis实现消息队列的示例代码的知识点总结: 一、序列化 * 序列化是将对象转换为byte数组的过程,Java中可以使用ByteArrayOutputStream和...
### 自定义实现Java线程池 #### 一、概述 在深入探讨自定义Java线程池之前,我们先简要回顾一下线程池的基本概念及其重要性。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动...
总结来说,自定义Java线程池的实现涉及到线程的管理和调度,包括核心线程的维护、任务队列的使用以及拒绝策略的设定。理解这些机制有助于我们更好地优化并发程序,提高系统效率。然而,在实际开发中,通常推荐使用...
本资源包含了一个经典的Java线程池实现,适用于大型项目,能帮助开发者理解并应用线程池技术。 线程池的概念源于操作系统中的进程池,其核心思想是减少创建和销毁线程的开销,通过复用已存在的线程来提高系统效率。...
Java线程池是一种高效管理并发任务执行的机制,它通过预先创建并维护一定数量的线程,从而避免了频繁地创建和销毁线程所带来的性能开销。在Java中,线程池的实现主要依赖于`java.util.concurrent`包中的`...
Java线程池由`java.util.concurrent`包中的`ExecutorService`接口和其子类实现。其中,最常用的是`ThreadPoolExecutor`类,它提供了丰富的参数用于定制线程池的行为。线程池的核心组件包括: - **核心线程数...
本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时利用队列结构来协调任务的调度与执行。 #### 关键技术...
在本文中,我们将详细介绍Java线程池工作队列饱和策略的概念、原理和实现。 线程池(Thread Pool)是并行执行任务收集的实用工具。随着CPU引入适合于应用程序并行化的多核体系结构,线程池的作用正日益显现。通过...
在Java编程中,"并发-线程池和...总之,理解和掌握线程池与阻塞队列的原理和使用方法,是提升Java并发编程能力的重要一步。它们为开发人员提供了一种强大而灵活的工具,能够在处理并发问题时保证系统的稳定性和性能。
理解Java线程池的原理和实现,可以帮助我们更有效地管理并发任务,提升系统性能,同时避免资源浪费和线程安全问题。在实际开发中,合理配置线程池参数,结合业务场景选择合适的线程池类型,是优化系统性能的关键步骤...
Java线程池是Java并发编程中的重要组成部分,它在Java 5及后续版本中引入,大大简化了线程管理和资源调度。线程池通过`Executor`接口和`ExecutorService`接口提供了一套强大的机制,允许开发者高效地创建、管理和...
JVM优先级线程池做任务队列的实现方法是指在Java虚拟机(JVM)中使用线程池来管理和执行任务队列的方法。这种方法可以将任务按照优先级排队,并且可以根据实际情况动态调整线程池的大小,从而提高系统的并发处理能力...