锁定老帖子 主题:线程池示例代码,请大家多指教
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (13)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-25
package com.shy.sql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Enumeration; import java.util.Hashtable; public class QConnectionPool { private Hashtable connections;// 连接列表 private int increment;// 连接增长量 private String dbURL;// 数据库连接url private String user; private String password; private String diverClassName;// 驱动名称 /** * 构造方法 * * @param dbURL * 数据库连接url * @param user * 用户名 * @param password * 密码 * @param driverClassName * 驱动名称 * @param initialConnections * 初始连接数 * @param increment * 增加数 * @throws SQLException * @throws ClassNotFoundException */ public QConnectionPool(String dbURL, String user, String password, String driverClassName, int initialConnections, int increment) throws SQLException, ClassNotFoundException { Class.forName(driverClassName); this.dbURL = dbURL; this.user = user; this.password = password; this.increment = increment; connections = new Hashtable(); for (int i = 0; i < initialConnections; i++) { connections.put(DriverManager.getConnection(dbURL, user, password), false); } } /** * 从连接池返回一个Connection * @return * @throws SQLException */ public Connection getConnection() throws SQLException { Connection conn = null; Enumeration conns = connections.keys(); synchronized (connections) { while (conns.hasMoreElements()) { conn = (Connection) conns.nextElement(); Boolean b = (Boolean) connections.get(conn); //如果是不使用的连接,使其使用 if (b == Boolean.FALSE) { try { conn.setAutoCommit(true); } catch (SQLException e) { connections.remove(conn); conn = DriverManager.getConnection(dbURL, user, password); } // 更新Hashtable connections.put(conn, Boolean.TRUE); return conn; } } } //如果没有空闲的连接,增加连接数 for (int i = 0; i < increment; i++) { connections.put(DriverManager.getConnection(dbURL, user, password), Boolean.TRUE); } return getConnection(); } /** * 由连接池客户用来向连接池返回一个Connection */ public void returnConnection(Connection returned){ if(connections.containsKey(returned)) { connections.put(returned, Boolean.FALSE); } } } 共享一个自己的,呵呵! |
|
返回顶楼 | |
发表时间:2009-08-25
楼上用的啥数据库,为什么自己做个ConnectionPool??
|
|
返回顶楼 | |
发表时间:2009-08-26
别整那么多SLEEP,wait下,合适的机会notify.SLeep不好.
|
|
返回顶楼 | |
发表时间:2009-08-31
zhang_jie439 写道 import java.util.*; public class ThreadPool { private LinkedList<Runnable> taskList = null; private boolean closed = false; public ThreadPool() { this.taskList = new LinkedList<Runnable>(); for (int i = 0; i < 4; i++) { Thread work = new WorkThread(); work.setDaemon(true); work.start(); } } public synchronized void addTask(Runnable task) { if (closed) return; if (null == task) return; this.taskList.add(task); notify(); } private synchronized Runnable getTask() { while (this.taskList.size() == 0) { try { if (closed) return null; wait(); } catch (InterruptedException e) { e.printStackTrace(); } } return this.taskList.removeFirst(); } public void close() { synchronized (this) { this.closed = true; } } private class WorkThread extends Thread { public void run() { while (true) { Runnable task = null; task = getTask(); if (null == task) return; task.run(); } } } } 哥们,这个多少年前就存在吧!!!! |
|
返回顶楼 | |
发表时间:2009-08-31
如果你用是ssh在添加spring ,hibernate ,struts你就可以建连接池。
|
|
返回顶楼 | |
发表时间:2009-08-31
yangke_love 写道 JDK5.0中有相关的线程管理内容,你可以参考下Think In Java 第四版
是这样的,Thinking In Java写的很详细了 |
|
返回顶楼 | |
发表时间:2009-09-05
贴大段的代码。实在是懒得看。建议:把UML 时序图,活动图,类图。
设计清晰一目了然。细节的实现。就是 技术人员 本身素质的问题了。 还有一点。的确如楼上所说。Think In Java 第四版 |
|
返回顶楼 | |