- 浏览: 1529137 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
d
转自:来源忘记了。
/** * JavaGGDataSource.java 2011-3-4 上午09:21:05 */ package test.datasource; import java.io.PrintWriter; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.locks.ReentrantLock; import javax.sql.DataSource; /** * @author linzq * */ public class JavaGGDataSource implements DataSource { // 连接队列 private ConcurrentLinkedQueue<_Connection> connQueue = new ConcurrentLinkedQueue<_Connection>(); // 存放所有连接容器 private List<_Connection> conns = new ArrayList<_Connection>(); private Driver driver = null; private String jdbcUrl = null; private String user = null; private String password = null; // -1为不限制连接数 private int maxActive = -1; private String driverClass = null; // 默认为4小时,即4小时没有任何sql操作就把所有连接重新建立连接 private int timeout = 1000 * 60 * 60 * 4; private AtomicLong lastCheckout = new AtomicLong( System .currentTimeMillis()); private AtomicInteger connCount = new AtomicInteger(); // 线程锁,主要用于新建连接和清空连接时 private ReentrantLock lock = new ReentrantLock(); public void closeAllConnection() { } /** * * 归还连接给连接池 * * * * @param conn * *@date 2009-8-13 * *@author eric.chan */ public void offerConnection(_Connection conn) { connQueue.offer(conn); } @Override public Connection getConnection() throws SQLException { return getConnection(user, password); } /** * * 从池中得到连接,如果池中没有连接,则建立新的sql连接 * * * * @param username * * @param password * * @author eric.chan */ @Override public Connection getConnection(String username, String password) throws SQLException { checkTimeout(); _Connection conn = connQueue.poll(); if (conn == null) { if (maxActive > 0 && connCount.get() >= maxActive) { for (;;) { // 采用自旋方法 从已满的池中得到一个连接 conn = connQueue.poll(); if (conn != null) break; else continue; } } lock.lock(); try { if (maxActive > 0 && connCount.get() >= maxActive) { // 处理并发问题 return getConnection(username, password); } Properties info = new Properties(); info.put("user", username); info.put("password", password); Connection conn1 = loadDriver().connect(jdbcUrl, info); conn = new _Connection(conn1, this); int c = connCount.incrementAndGet();// 当前连接数加1 conns.add(conn); System.out.println("info : init no. " + c + " connectioned"); } finally { lock.unlock(); } } lastCheckout.getAndSet(System.currentTimeMillis()); return conn.getConnection(); } /** * * 检查最后一次的连接时间 * * * * @throws SQLException * *@date 2009-8-13 * *@author eric.chan */ private void checkTimeout() throws SQLException { long now = System.currentTimeMillis(); long lt = lastCheckout.get(); if ((now - lt) > timeout) { _Connection conn = null; lock.lock(); try { if (connCount.get() == 0) return; while ((conn = connQueue.poll()) != null) { System.out.println("connection " + conn + " close "); conn.close(); conn = null; } for (_Connection con : conns) { con.close(); } conns.clear(); System.out.println("info : reset all connections"); // 重置连接数计数器 connCount.getAndSet(0); lastCheckout.getAndSet(System.currentTimeMillis()); } finally { lock.unlock(); } } } /** * * * * @return * *@date 2009-8-13 * *@author eric.chan */ private Driver loadDriver() { if (driver == null) { try { driver = (Driver) Class.forName(driverClass).newInstance(); } catch (ClassNotFoundException e) { System.out.println("error : can not find driver class " + driverClass); } catch (Exception e) { e.printStackTrace(); } } return driver; } @Override public PrintWriter getLogWriter() throws SQLException { return null; } @Override public int getLoginTimeout() throws SQLException { return 0; } @Override public void setLogWriter(PrintWriter out) throws SQLException { } @Override public void setLoginTimeout(int seconds) throws SQLException { } @Override public boolean isWrapperFor(Class iface) throws SQLException { throw new SQLException("no Implemented isWrapperFor method"); } @Override public <T> T unwrap(Class<T> iface) throws SQLException { throw new SQLException("no Implemented unwrap method"); } public String getJdbcUrl() { return jdbcUrl; } public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } public String getUsername() { return user; } public void setUsername(String user) { this.user = user; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDriverClass() { return driverClass; } public void setDriverClass(String driverClass) { this.driverClass = driverClass; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout * 1000; } public void setMaxActive(int maxActive) { this.maxActive = maxActive; } public int getMaxActive() { return maxActive; } } /** * 数据连接的自封装 ,是java.sql.Connection的一个钩子,主要是处理close方法 * * @author linzq * */ class _Connection implements InvocationHandler { private final static String CLOSE_METHOD_NAME = "close"; private final Connection conn; private final JavaGGDataSource ds; _Connection(Connection conn, JavaGGDataSource ds) { this.conn = conn; this.ds = ds; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object obj = null; // 判断是否调用了close的方法,如果调用close方法则把连接置为无用状态 if (CLOSE_METHOD_NAME.equals(method.getName())) { // 归还连接给连接池 ds.offerConnection(this); } else { // 运行非close的方法 obj = method.invoke(conn, args); } return obj; } public Connection getConnection() { // 返回数据库连接conn的接管类,以便截住close方法 Connection conn2 = (Connection) Proxy.newProxyInstance(conn.getClass() .getClassLoader(), new Class[] { Connection.class }, this); return conn2; } public void close() throws SQLException { // 调用真正的close方法,一但调用此方法就直接关闭连接 if (conn != null && !conn.isClosed()) conn.close(); } }
/** * TestGG.java 2011-3-4 上午10:02:14 */ package test.datasource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @author linzq * */ public class TestGG { /** * @param args */ public static void main(String[] args) { JavaGGDataSource ds = new JavaGGDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/test"); ds.setUsername("root"); ds.setPassword("123456"); ds.setTimeout(300); // ds.setMaxActive(60); for (int i = 0; i < 20; i++) { new GG(ds).start(); } } static class GG extends Thread { JavaGGDataSource ds = null; long l = System.currentTimeMillis(); public GG(JavaGGDataSource ds) { this.ds = ds; } static final String sql = "insert into testgg(col1,cols) values (?,?)"; static final String selectsql = "select * from testgg where id=?"; public void run() { for (int t = 0; t < 10000; t++) { Connection conn = null; try { conn = ds.getConnection(); PreparedStatement ps = conn.prepareStatement(sql); // 以下为insert ps.setInt(1, 133664); ps.setString(2, "ddd"); ps.executeUpdate(); ResultSet rs = ps.getGeneratedKeys(); // 以下为select // 取得自增长ID ps = conn.prepareStatement(selectsql); if (rs.next()) { // System.out.println(rs); ps.setInt(1, rs.getInt("GENERATED_KEY"));// 表的字段名字也可以用字段下标值 } rs = ps.executeQuery(); while (rs.next()) { rs.getInt("id"); rs.getInt("col1"); } rs.close(); ps.close(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (conn != null) { // ds.offerConnection(conn); conn.close(); } } catch (Exception e) { e.printStackTrace(); } } } System.out.println(System.currentTimeMillis() - l); } } }
数据库表结构:
CREATE TABLE `testgg` ( `id` int(11) NOT NULL auto_increment, `col1` int(11) default NULL, `cols` varchar(200) default NULL, PRIMARY KEY (`id`) )
d
发表评论
-
Java线程:线程状态的转换
2012-01-30 16:09 924转自:http://lavasoft.blog.51cto.c ... -
多个线程访问共享对象和数据的方式
2011-10-26 08:15 1147(1)如果每个线程执行的代码相同,可以使用同一个Runnabl ... -
线程同步通信
2011-10-22 19:48 870看传智播客张孝祥讲的一个例子。 子线程循环10次 ... -
Java threads may not use all your CPUs
2010-06-10 11:51 1060Enterprise-level applications o ... -
java.util.concurrent.CountDownLatch
2009-12-13 10:53 1892import java.util.concurrent. ... -
java.util.concurrent.Exchanger
2009-12-13 10:52 2936d import java.util.concurrent. ... -
java.util.concurrent.Semaphore
2009-12-11 22:25 2642http://zhidao.baidu.com/questio ... -
java.util.concurrent.CyclicBarrier
2009-12-11 11:46 4710在实际应用中,有时候需要多个线程同时工作以完成同一件事情,而且 ...
相关推荐
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
weixin138社区互助养老+ssm(论文+源码)_kaic.zip
光纤到户及通信基础设施报装申请表.docx
项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 服务器:tomcat7
功能完善的电商数据智能爬虫采集系统项目全套技术资料.zip
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
### Android程序开发初级教程(一):初识Android **平台概述** Google推出的Android操作系统平台已经正式亮相,这是一个基于Linux内核的开源操作系统。对于开发者而言,了解其架构和支持的开发语言至关重要。以下是Android平台的架构概览: **平台架构及功能** 1. **应用框架(Application Framework)**:包含可重用和可替换的组件,确保所有软件在该层面上的平等性。 2. **Dalvik虚拟机(Dalvik Virtual Machine)**:一个基于Linux的虚拟机,为Android应用提供运行环境。 3. **集成浏览器(Integrated Browser)**:基于开源WebKit引擎的浏览器,位于应用层。 4. **优化图形(Optimized Graphics)**:包括自定义的2D图形库和遵循OpenGL ES 1.0标准的3D实现。 5. **SQLite数据库**:用于数据存储。 6. **多媒体支持(Media Support)**:支持通用音频、视频以及多种图片格式(如MPEG4, H.264
内容概要:本文档是《组合数学答案-网络流传版.pdf》的内容,主要包含了排列组合的基础知识以及一些经典的组合数学题目。这些题目涵盖了从排列数计算、二项式定理的应用到容斥原理的实际应用等方面。通过对这些题目的解析,帮助读者加深对组合数学概念和技巧的理解。 适用人群:适合初学者和有一定基础的学习者。 使用场景及目标:可以在学习组合数学课程时作为练习题参考,也可以在复习考试或准备竞赛时使用,目的是提高解决组合数学问题的能力。 其他说明:文档中的题目覆盖了组合数学的基本知识点,适合逐步深入学习。每个题目都有详细的解答步骤,有助于读者掌握解题思路和方法。
.net core mvc在线考试系统asp.net考试系统源码考试管理系统 主要技术: 基于.net core mvc架构和sql server数据库,数据库访问采用EF core code first,前端采用vue.js和bootstrap。 功能模块: 系统包括前台和后台两个部分,分三种角色登录。 管理员登录后台,拥有科目管理,题库管理,考试管理,成绩管理,用户管理等功能。 教师登录后台,可进行题库管理,考试管理和成绩管理。 用户登录前台,可查看考试列表,参加考试,查看已考试的结果,修改密码等。 系统实现了国际化,支持中英两种语言。 源码打包: 包含全套源码,数据库文件,需求分析和代码说明文档。 运行环境: 运行需vs2019或者以上版本,sql server2012或者以上版本。
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
包含了登陆注册、用户管理、部门管理、文件管理、权限管理、日志管理、个人中心、数据字典和代码生成这九个功能模块 系统采用了基于角色的访问控制,角色和菜单关联,一个角色可以配置多个菜单权限;然后再将用户和角色关联,一位用户可以赋予多个角色。这样用户就可以根据角色拿到该有的菜单权限,更方便管理者进行权限管控。 本系统还封装了文件管理功能,在其他模块如若要实现图片/文件上传预览时,前端只需导入现成的 Vue 组件即可实现(使用 viewerjs 依赖实现),后端只需定义 String 类型的实体类变量即可,无需再去研究文件上传预览的相关功能,简化了开发者的工作量。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
三相10Kw光伏并网逆变器。包含全套理图 PCB 源代码
GJB 5236-2004 军用软件质量度量文档,本称准规定了车用软件产品的质重模型和基本的度量。本标准为确定车用软件质量需求和衡量军用 软件产品的能力提供了一个框架。
基于MATLAB车牌识别系统【GUI含界面】.zip。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
【宿舍管理系统】是一种专为高校或住宿机构设计的信息化解决方案,旨在提高宿舍管理的效率和准确性。该系统包含了多项核心功能,如宿舍管理员管理、宿舍信息维护、查询、卫生检查以及电费缴纳等,旨在实现全面的宿舍运营自动化。 **宿舍管理员管理**功能允许指定的管理员进行用户权限分配和角色设定。这包括对管理员账户的创建、修改和删除,以及设置不同的操作权限,例如只读、编辑或管理员权限。通过这样的权限控制,可以确保数据的安全性和管理的规范性。 **宿舍添加与管理**是系统的基础模块。管理员可以录入宿舍的基本信息,如宿舍号、楼栋、楼层、房间类型(单人间、双人间等)、容纳人数、设施配置等。此外,系统还支持批量导入或导出宿舍信息,方便数据的备份和迁移。 **查询功能**是系统的重要组成部分,它允许管理员和学生根据不同的条件(如宿舍号、楼栋、学生姓名等)快速查找宿舍信息。此外,系统还可以生成各种统计报告,如宿舍占用率、空闲宿舍数量等,以便于决策者进行资源优化。 **卫生检查**功能则是对宿舍卫生状况进行定期评估。管理员可设定检查计划,包括检查周期、评分标准等,并记录每次检查的结果。系统能自动生成卫生报表,用于
YOLO系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中,文件名末尾是部分类别名称; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值; 【注】可以下拉页面,在资源详情处查看标签具体内容;
九缸星形发动机点火器3D
本项目可以作为小程序毕设项目,主要功能为音乐播放器,主要功能是:可以播放歌曲(采用mp3网络连接实现)、专辑封面播放时可以旋转,能够实现开始和暂停播放,可以点击下一首歌曲,主页面实现动态轮播图
出差审批单(表格模板).docx