import java.util.LinkedList;
public abstract class Manager {
private String mThreadPoolName = null;
private int mThreadPoolMaxSize = 1;
private LinkedList workers = new LinkedList();
public Manager() {
}
public Manager(String name, int poolMaxSize) {
mThreadPoolName = name;
createWorker(name, poolMaxSize);
mThreadPoolMaxSize = poolMaxSize;
}
private void createWorker(int poolMaxSize) {
for (int i = 0; i < poolMaxSize; i++) {
Worker worker = new ...Worker(this);
workers.addLast(worker);
}
}
public synchronized Worker getIdleWorker() {
return (Worker)workers.removeFirst();
}
public synchronized void notifyFree(Worker worker) {
if (workers.size() < mThreadPoolMaxSize) {
workers.addLast(worker);
} else {
worker = null;
}
}
public int getThreadPoolMaxSize() {
return mThreadPoolMaxSize;
}
public void setThreadPoolMaxSize(int threadPoolMaxSize) {
this.mThreadPoolMaxSize = threadPoolMaxSize;
}
}
线程抽象类
public abstract class Worker implements Runnable {
private Manager mManager = null;
private Thread mThread = null;
public Worker() {
}
public Worker(String threadName, Manager manager) {
mManager = manager;
mThread = new Thread(this, threadName);
init();
mThread.start();
}
public abstract void init();
public void run() {
while (true) {
waitForStart();
Worker worker = mManager.getIdleWorker();
process();
isRunning = false;
mManager.notifyFree(worker);
}
}
public abstract void process();
public void start() {
isRunning = true;
mManager.getIdleWorker();
notifyToStart();
}
public synchronized void waitForStart() {
try {
wait();
} catch (InterruptedException ex) {
}
}
public synchronized void notifyToStart() {
notify();
}
}
分享到:
相关推荐
8. **线程安全**:由于多线程环境下可能会有多个线程同时操作连接池,因此连接池的实现必须是线程安全的,确保并发访问时数据的一致性和完整性。 9. **预设参数**:配置文件中的参数设置对连接池性能影响很大,如...
Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...
在Java编程中,数据库连接池是一种管理数据库连接的机制,它允许程序重复使用一个已经存在的数据库连接,而不是每次需要时都创建新的连接。这大大提高了应用程序的性能和效率,因为建立和关闭数据库连接是耗时的操作...
本实例探讨的是如何利用Java中的Socket对象以及线程连接池技术,特别是`GenericObjectPool`来提高程序性能和效率。首先,我们需要理解Socket和线程连接池的基本概念。 **Socket**: Socket是网络通信的一种接口,它...
Java实现连接池是一种提高数据库操作效率的技术,它通过管理和重用数据库连接,避免了频繁创建和销毁连接导致的性能开销。在Java中,我们通常使用第三方库来实现连接池,如Apache的DBCP、C3P0,或者更现代的HikariCP...
Java网络编程是构建分布式应用程序的关键技术,特别是在服务器端开发中,多线程和连接池是其核心概念。本文将深入探讨这两个主题,并结合文件传输的实际应用进行讲解。 首先,我们来理解多线程。在Java中,多线程...
在Java程序中,我们创建`BasicDataSource`实例,并使用`Properties`类加载配置文件中的信息,然后将这些信息设置到`BasicDataSource`对象上。 ```java // 创建Properties对象并加载配置文件 Properties prop = new ...
Java JDBC 数据库连接池是 Java 应用程序访问数据库的基本原理之一。Java 语言通过 JDBC 技术访问数据库,JDBC 是一种“开放”的方案,为数据库应用开发人员和数据库前台工具开发人员提供了一种标准的应用程序设计...
在实际开发中,我们通常会使用成熟的连接池库,如 Apache Commons DBCP、C3P0 或者 HikariCP,这些库提供了更高级的功能,如自动回收超时连接、连接健康检查等,而且已经优化了性能和线程安全性。但在面试或学习场景...
常见的Web应用服务器如WebLogic和WebSphere内置了连接池功能,但使用时需依赖特定的服务器API。连接池的关键技术问题包括: 1. **并发问题**:在多线程环境下,连接池需要确保线程安全。Java的`synchronized`关键字...
本文将深入探讨数据库连接池的工作原理、重要性以及如何在Java中实现一个简单的连接池。 首先,数据库连接池是管理数据库连接的一种机制,它允许应用程序重复使用已建立的数据库连接,而不是每次需要时都创建新的...
本主题聚焦于如何利用多线程实现在不同数据库间的数据互导,以及结合连接池技术来优化数据库操作,并实现多表插入功能。我们将深入探讨以下几个核心知识点: 1. **Java多线程**: - **线程创建**:Java提供了多种...
通过以上分析可以看出,本文介绍的Java版数据库连接池实现相对简单,但涵盖了连接池的基本功能,包括连接的创建、管理、回收等。实际应用中,可能还需要考虑更多细节,例如连接超时处理、连接异常处理、线程安全等。...
### 使用Java NIO实现异步连接池的关键知识点 #### 异步连接池的诞生背景与重要性 在现代Web应用程序开发中,为了提升系统性能和响应速度,常连接与连接池技术成为不可或缺的一部分。常连接是指一个持久存在的TCP...
- **数据库连接池核心类**:实现了连接池的核心功能,包括连接的创建、管理和分配。 - **配置文件**:用于设置连接池的参数,如数据库URL、用户名、密码、初始连接数、最大连接数等。 - **数据库驱动**:需要添加...
Java连接池是Java应用程序中管理数据库连接的一种机制,它的出现大大提高了数据库操作的性能和效率。连接池的基本思想是预先创建一定数量的数据库连接,并将它们保存在一个池中,当应用需要时可以从池中获取一个连接...
### 基于Java的数据库连接池技术的设计与实现 #### 概述 数据库连接池技术是现代软件开发中的一项关键技术,特别是在Java企业级应用中。它通过预先创建一定数量的数据库连接,并将这些连接组织成一个池,来提高...
- 大型Web应用服务器如WebLogic和WebSphere提供了内置的连接池功能,但通常需要特定的API或配置进行管理。 **连接池的关键问题及其解决** 1. **并发问题** - 在Java中,通过`synchronized`关键字实现线程同步,...
Proxool作为Java连接池的一种实现,其核心功能包括: 1. **连接管理**:Proxool维护一个连接池,根据预设的配置参数动态调整连接数量。当应用程序需要连接时,可以从池中获取;使用完毕后,连接归还到池中,而不是...
在Java中,有许多成熟的数据库连接池实现,如Apache的Commons DBCP、C3P0、HikariCP等,它们提供了上述功能,并经过了大量生产环境的检验,具有良好的稳定性和性能。 总结起来,数据库连接池是通过管理预创建的...