在我们的开发过程中,经常会碰到很复杂的业务逻辑需要处理,处理这种逻辑又很费时,影响系统效率,这个时候我们往往使用多线程进行异步处理。以下就是一个简单应用java并发包的API实现多线程的例子。
/**
线程管理类
*/
import java.util.Hashtable;
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 Hashtable<String,ThreadPoolManager> tb = new Hashtable<String,ThreadPoolManager>();
// 线程池维护线程的最少数量
private final static int CORE_POOL_SIZE = 5;
// 线程池维护线程的最大数量
private final static int MAX_POOL_SIZE = 20;
// 线程池维护线程所允许的空闲时间
private final static int KEEP_ALIVE_TIME = 180;
// 线程池所使用的缓冲队列大小
private final static int WORK_QUEUE_SIZE = 10000;
// 请求Request缓冲队列
public Queue<Runnable> msgQueue = new LinkedList<Runnable>();
// 访问请求Request缓存的调度线程
final Runnable accessBufferThread = new Runnable()
{
public void run()
{
// 查看是否有待定请求,如果有,则添加到线程池中
if( hasMoreAcquire() )
{
//SearchTask task = ( SearchTask ) msgQueue.poll();
threadPool.execute( msgQueue.poll() );
}
}
};
//handler - 由于超出线程范围和队列容量而使执行被阻塞时所使用的处理程序
final RejectedExecutionHandler handler = new RejectedExecutionHandler()
{
public void rejectedExecution( Runnable r, ThreadPoolExecutor executor )
{
System.out.println(r+" request 放入队列中重新等待执行 "+r );
msgQueue.offer( r );
}
};
// 管理线程池
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 );
/**
* 根据key取得对应实例
* @param key
* @return
*/
public static synchronized ThreadPoolManager getInstance( String key )
{
ThreadPoolManager obj = tb.get(key);
if( obj == null )
{
System.out.println("new thread pool :"+key);
obj = new ThreadPoolManager();
tb.put(key, obj);
}
return obj;
}
private ThreadPoolManager(){}
private boolean hasMoreAcquire()
{
return !msgQueue.isEmpty();
}
public void addTask( Runnable task )
{
threadPool.execute( task );
}
}
/**任务类,要处理的业务逻辑*/
public class Task implements Runnable {
@Override
public void run()
{
//处理一些耗时,影响系统性能的业务逻辑放这里
//这里只简单输出
System.out.println(".............");
}
}
//编写一个客户类调用
public class Client{
private static ThreadPoolManager threadPoolManager = ThreadPoolManager.getInstance( "threadPoolManager " );
public static void main(String[] args){
threadPoolManager.addTask(new Task());
}
}
分享到:
相关推荐
Java 线程池例子 ThreadPoolExecutor Java 中的线程池是指一个容器,里面包含了多个线程,这些线程可以重复使用,以避免频繁创建和销毁线程的开销。ThreadPoolExecutor 是 Java 中一个非常重要的线程池实现类,它...
通过合理使用Java线程池,开发者可以更加高效地管理线程资源,提高应用程序的性能和稳定性。线程池的使用也应当注意避免资源竞争、线程死锁以及可能的内存泄漏等问题,确保线程安全和高效的并行处理能力。
提供工厂方法来创建不同类型的线程池,这篇文章主要介绍了Java ThreadPoolExecutor 线程池的使用介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来...
在提供的"线程池示例"文件中,应该包含了创建和使用线程池的代码示例,你可以参考并进行扩展,例如添加更多任务、调整线程池参数,或者实现自定义的线程工厂和拒绝策略,以加深对线程池的理解。
在这个"Java-Thread-Pool-example"中,我们将深入探讨Java线程池的实现、优势以及如何使用它。 Java中的线程池是通过`java.util.concurrent`包下的`ExecutorService`接口和`ThreadPoolExecutor`类来实现的。`...
Java线程池是一种高效利用系统资源、管理并发执行任务的机制。它的原理是通过预先创建一组线程,这些线程在任务到来时可以立即执行,而不是每次需要执行任务时都新建线程,从而降低了线程创建和销毁带来的开销。...
`funbde`可能是指作者的名字或者是某个特定功能的代号,由于描述中提到“不是整一个项目,仅供参考”,我们可以理解为这是一个关于Java线程池的示例代码或片段,用于演示线程池的基本用法或者特定的线程池配置和优化...
Java线程池是一种高效管理线程资源的技术,它允许开发者创建一组可重用的工作线程,从而避免频繁地创建和销毁线程带来的性能开销。线程池在Java中主要通过`java.util.concurrent`包中的`ExecutorService`接口及其...
Java线程池是Java并发编程中的重要组成部分,它允许开发者高效地管理多个并发执行的线程,有效地控制系统的资源消耗,提高系统性能和稳定性。在Java中,`java.util.concurrent`包提供了`ExecutorService`接口及其...
### Java线程池的使用方式 #### 一、简介 ...通过以上介绍和示例,我们可以看到Java线程池的强大功能及其在实际应用中的重要作用。理解并掌握这些概念将有助于开发者更好地管理和优化多线程应用程序。
### Java线程池详解 #### 引言 在现代计算机科学中,线程作为轻量级的进程,已经成为操作系统和应用程序提高并发性、优化资源...理解和掌握Java线程池的原理和使用方法,对于开发高性能、高可靠的Java应用至关重要。
Java线程池与反射机制是Java编程中两个重要的概念,它们在实际开发中扮演着至关重要的角色。线程池能够有效地管理和控制并发执行的任务,而反射机制则允许我们在运行时动态地访问和修改类的信息。 首先,让我们深入...
总结来说,自定义Java线程池的实现涉及到线程的管理和调度,包括核心线程的维护、任务队列的使用以及拒绝策略的设定。理解这些机制有助于我们更好地优化并发程序,提高系统效率。然而,在实际开发中,通常推荐使用...
要理解`java线程池threadpool简单使用源码`,你需要查看`src`目录下的Java文件,了解如何实例化`ThreadPoolExecutor`,设置相关参数,以及如何提交任务到线程池。同时,查看源码中对`ThreadGroup`的使用,理解它如何...
Java线程池是一种高效管理并发任务执行的机制,它通过维护一组可重用的线程来减少创建和销毁线程的开销。线程池在Java中由`java.util.concurrent`包下的`ExecutorService`接口及其实现类,尤其是`ThreadPoolExecutor...
"JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...
Java线程池是一种高效管理线程的机制,它克服了直接使用`new Thread()`创建线程的诸多弊端。创建线程池的主要目的是重用已存在的线程,减少新对象的创建和销毁开销,从而提升程序性能。此外,线程池还可以通过控制...
Java线程池是一种高效管理线程资源的工具,它能够帮助开发者有效地控制并发执行的线程数量,提高系统性能,并确保程序的稳定性和可维护性。在Java中,线程池的实现主要依赖于`java.util.concurrent`包中的`...
### 深入理解Java之线程池 #### 一、Java中的`ThreadPoolExecutor`类 在Java中,`ThreadPoolExecutor`是线程池的核心实现类之一,它提供了丰富的配置选项来...通过以上介绍,相信您对Java线程池有了更深入的理解。