- 浏览: 397723 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (760)
- 股票日志 (26)
- Selenium (0)
- selenium 2 环境的搭建 (1)
- 并发 (7)
- 框架开发 (1)
- 动态代理 (2)
- Struts2 (2)
- POI (2)
- jdk (3)
- maven (31)
- spring (35)
- mysql (31)
- 工作机会 (3)
- xtream (1)
- oracle dbms_metadata GET_DDL (0)
- SSI (1)
- DB (61)
- powermock (4)
- java 基础 (25)
- 多线程 (11)
- 高手 (2)
- java 底层 (2)
- 专业网站 (1)
- 开发联想 (1)
- 开发联想 (1)
- bat文件 (2)
- 清queue 语句 (1)
- 清queue 语句 (1)
- jquery (7)
- html5 (1)
- Jenkins (10)
- Linux (17)
- 工作issue (2)
- tomcat log (3)
- jvm (23)
- 项目细节 (0)
- oracle (41)
- 泛型 (3)
- 新知识点 (1)
- 数据库ddl 语句 (0)
- AQ (2)
- jms (0)
- 网络资源 (6)
- github (6)
- Easymock (1)
- Dom 解析XML (1)
- windows命令 (2)
- java (7)
- 正则表达式 (5)
- sequence (1)
- oracle 表meta信息 (1)
- 小工具技巧 (1)
- 辅助工具 (1)
- Junit (1)
- 泛型 generic (2)
- Java程序设计 (1)
- cglib (2)
- 架构师之路 (1)
- 数据库连接池 (5)
- c3p0 (1)
- eclipse使用 (1)
- oracle sql plus (1)
- 码农人生 (3)
- SVN (15)
- sqlplus (2)
- jsoup (1)
- 网络爬虫 (2)
- 新技能 (1)
- zookeeper (4)
- hadoop (1)
- SVNKIT (1)
- 从工具到知识点的整理 (1)
- log4j (13)
- 读文件 (0)
- 转义字符 (1)
- command (1)
- web service (3)
- 锁 (1)
- shell 脚本 (1)
- 遇到的错误 (2)
- tomcat (14)
- 房产 (5)
- bootstrap jquery ui (1)
- easyui (2)
- 个人征信 (1)
- 读写分离 (1)
- 备份 (1)
- rmi (6)
- webservice (1)
- JMX (4)
- 内存管理 (3)
- java设计 (1)
- timer (1)
- lock (2)
- concurrent (2)
- collection (1)
- tns (1)
- java基础 (15)
- File (1)
- 本机资源 (1)
- bat (1)
- windows (4)
- 数据结构 (3)
- 代码安全 (1)
- 作用域 (1)
- 图 (2)
- jvm内存结构 (1)
- 计算机思想 (1)
- quartz (6)
- Mongo DB (2)
- Nosql (4)
- sql (5)
- 第三方Java 工具 jar 项目 (2)
- drools (1)
- java swing (2)
- 调用console (1)
- runtime (1)
- process (1)
- swing (2)
- grouplayout (1)
- dubbo (0)
- bootstrap (0)
- nodejs (2)
- SVN hooks (1)
- jdbc (3)
- jdbc error (1)
- precedure (1)
- partition_key (1)
- active mq (1)
- blob (2)
- Eclipse (6)
- web server (1)
- bootstrapt (2)
- struts (1)
- ajax (1)
- js call back (1)
- 思想境界拓展 (1)
- JIRA (1)
- log (1)
- jaxb (3)
- xml java互相转换 (1)
- 装修 (2)
- 互联网 (2)
- threadlocal (3)
- mybatis (22)
- xstream (1)
- 排序 (1)
- 股票资源 (1)
- RPC (2)
- NIO (3)
- http client (6)
- 他人博客 (1)
- 代理服务器 (1)
- 网络 (2)
- web (1)
- 股票 (5)
- deadlock (1)
- JConsole (2)
- activemq (3)
- oralce (1)
- 游标 (1)
- 12月13日道富内部培训 (0)
- grant (1)
- 速查 (2)
- classloader (4)
- netty (4)
- 设计模式 (2)
- 缓存 (2)
- ehcache (2)
- framework (1)
- 内存分析 (2)
- dump (1)
- memory (2)
- 多高线程,并发 (1)
- hbase (2)
- 分布式系统 (1)
- socket (3)
- socket (1)
- 面试问题 (1)
- jetty (2)
- http (2)
- 源码 (1)
- 日志 (2)
- jni (1)
- 编码约定 (1)
- memorycache (1)
- redis (13)
- 杂谈 (1)
- drool (1)
- blockingqueue (1)
- ScheduledExecutorService (1)
- 网页爬虫 (1)
- httpclient (4)
- httpparser (1)
- map (1)
- 单例 (1)
- synchronized (2)
- thread (1)
- job (1)
- hashcode (1)
- copyonwriteArrayList (2)
- 录制声音 (1)
- java 标准 (2)
- SSL/TLS (1)
- itext (1)
- pdf (1)
- 钻石 (2)
- sonar (1)
- unicode (1)
- 编码 (4)
- html (1)
- SecurityManager (1)
- 坑 (1)
- Restful (2)
- svn hook (1)
- concurrentHashMap (1)
- 垃圾回收 (1)
- vbs (8)
- visual svn (2)
- power shell (1)
- wmi (3)
- mof (2)
- c# (1)
- concurrency (1)
- 劳动法 (1)
- 三国志游戏 (2)
- 三国 (1)
- 洪榕 (2)
- 金融投资知识 (1)
- motan (1)
- tkmybatis mapper (1)
- 工商注册信息查询 (1)
- consul (1)
- 支付业务知识 (2)
- 数据库备份 (1)
- 字段设计 (1)
- 字段 (1)
- dba (1)
- 插件 (2)
- PropEdit插件 (1)
- web工程 (1)
- 银行业知识 (2)
- 国内托管银行 (1)
- 数据库 (1)
- 事务 (2)
- git (18)
- component-scan (1)
- 私人 (0)
- db2 (14)
- alias (1)
- 住房 (1)
- 户口 (1)
- fastjson (1)
- test (6)
- RSA (2)
- 密钥 (1)
- putty (1)
- sftp (1)
- 加密 (1)
- 公钥私钥 (3)
- markdown (1)
- sweet (1)
- sourcetree (1)
- 好工具 (1)
- cmd (1)
- scp (1)
- notepad++ (1)
- ssh免密登录 (1)
- https (1)
- ssl (2)
- js (2)
- h2 (1)
- 内存 (2)
- 浏览器 (1)
- js特效 (1)
- io (1)
- 乱码 (1)
- 小工具 (1)
- 每周技术任务 (1)
- mongodb (7)
- 内存泄漏 (1)
- 码云 (2)
- 如何搭建java 视频服务器 tomcat (1)
- 资源 (1)
- 书 (1)
- 四色建模法 (1)
- 建模 (1)
- 配置 (1)
- 职位 (1)
- nginx (1)
- excel (1)
- log4j2 (2)
- 做菜 (1)
- jmap (1)
- jspwiki (1)
- activiti (1)
- 工作流引擎 (1)
- 安卓 (1)
- acitviti 例子 (1)
- 二维码 (1)
- 工作流 (1)
- powerdesign (2)
- 软件设计 (1)
- 乐观锁 (1)
- 王者荣耀 (1)
- session (2)
- token (5)
- cookie (4)
- springboot (24)
- jwt (2)
- 项目路径 (1)
- magicbook (1)
- requestType (1)
- json (2)
- swagger (1)
- eolinker (1)
- springdata (1)
- springmvc (1)
- controlleradvice (1)
- profile (1)
- 银行四要素 (1)
- 支付人员资源 (1)
- 支付渠道 (1)
- yaml (1)
- 中文编码 (1)
- mongo (2)
- serializable (1)
- 序列化 (1)
- zyd (1)
- unittest (1)
- 工具 (1)
- Something (1)
- 通达信 (1)
- protobuf (1)
- 算法 (1)
- springcloud (2)
- hikari (1)
- rocketmq (7)
- cachecloud (1)
- serfj (1)
- axure (1)
- lombok (1)
- 分布式锁 (1)
- 线程 (2)
- 同步代码块 (1)
- cobar (1)
- mq (1)
- rabbitmq (1)
- 定时执行 (1)
- 支付系统 (3)
- 唱歌 (1)
- elasticjob (1)
- 定时任务 (1)
- 界面 (1)
- flink (2)
- 大数据 (1)
- 接私活 (0)
- 内部培训 (2)
最新评论
-
dannyhz:
做股票从短线 试水,然后 慢慢发现 波段和 中期的故事可挖, ...
搭台唱戏 -
dannyhz:
http://developer.51cto.com/art/ ...
如何自己开发框架 它的注意点是什么
引用
package com.statestr.gcth.ext.jms.oracleaq; import java.sql.SQLException; import java.util.Properties; import java.util.concurrent.CopyOnWriteArrayList; import javax.jms.JMSException; import oracle.jdbc.pool.OracleConnectionPoolDataSource; import oracle.jms.AQjmsFactory; import org.apache.log4j.Logger; import com.statestr.gcth.core.InitializationException; import com.statestr.gcth.core.annotation.InjectComponent; import com.statestr.gcth.core.annotation.InjectProperty; import com.statestr.gcth.core.configuration.model.ComponentConfig; import com.statestr.gcth.core.context.ContextManager; import com.statestr.gcth.core.jms.AbstractJmsConnectionResource; import com.statestr.gcth.core.jms.JmsConnection; import com.statestr.gcth.core.jms.JmsEndpointException; import com.statestr.gcth.core.security.SecurityHandler; import com.statestr.gcth.core.util.CommonUtil; /** * Connection factory for ActiveMQ. * * @author Jimmy Zhang */ public class OracleAqJmsConnectionResource extends AbstractJmsConnectionResource { private static final Logger LOGGER = Logger .getLogger(OracleAqJmsConnectionResource.class); @InjectProperty(required = true) private String brokerUrl; @InjectProperty(required = true) private String user; @InjectProperty(required = false) private String password; @InjectProperty(required = false) private String keyHost; private OracleConnectionPoolDataSource dataSource = null; @InjectComponent(required = false) SecurityHandler securityHandler; @InjectProperty(required = false) private Long readTimeout = 0L; // 0 default disable @InjectProperty(required = false) private Boolean oracleNetDisableOob = true; @InjectProperty(required = false) private String systemProperties = null; /** * {@inheritDoc} */ @Override public void config(ComponentConfig config) { super.config(config); // use the security handler to retrieve password // if it is available. if (securityHandler == null) { securityHandler = ContextManager.getSecurityHandler(); } if (securityHandler != null) { password = securityHandler.retrievePassword(keyHost, user); } try { dataSource = new OracleConnectionPoolDataSource(); Properties properties = CommonUtil.retrieveStringProperties(systemProperties);; // process id as current pid properties.setProperty("oracle.jdbc.v$session.process", String.valueOf(CommonUtil.getPid())); properties.setProperty("oracle.jdbc.ReadTimeout", String.valueOf(readTimeout * 1000)); properties.setProperty("oracle.net.disableOob", String.valueOf(oracleNetDisableOob)); dataSource.setConnectionProperties(properties); //dataSource.setDriverClass("oracle.jdbc.OracleDriver"); dataSource.setURL(brokerUrl); dataSource.setUser(user); dataSource.setPassword(password); // the settings below are optional -- c3p0 can work with defaults //dataSource.setMinPoolSize(initialPoolSize); //dataSource.setMaxPoolSize(maxPoolSize); //dataSource.setAcquireIncrement(this.aquireIncrement); connectionFactory = AQjmsFactory.getConnectionFactory(dataSource); connections = new CopyOnWriteArrayList<JmsConnection>(); createConnections(this.initialPoolSize); LOGGER.debug(String.format( "connection pool initialized with %d connections", initialPoolSize)); } catch (JMSException e) { String error = "Failed to get connectionFactory with error " + e.getMessage(); LOGGER.error(error); throw new InitializationException(error); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } LOGGER.debug(String.format( "connection pool initialized with %d connections", initialPoolSize)); // replace cxCode for OracleAQ if (DEFAULT_JMS_CX_CODE.equals(cxCode)) { cxCode = "CX610"; } } @Override protected void createConnections(int connCout) { for (int i = 0; i < connCout; i++) { try { if ( connections.size() >= maxPoolSize) { return; } JmsConnection conn = new JmsConnection(this, connectionFactory.createConnection()); conn.start(); conn.open(); connections.add(conn); LOGGER.info("create the JmsConnection " + conn); } catch (JMSException e) { String error = cxCode + " Unable to create AQ JMS connection with error " + e.getMessage(); LOGGER.fatal(error, e); throw new JmsEndpointException("failed to create connections", e); } } } @Override public String toString() { StringBuilder builder = new StringBuilder(super.toString()); builder.append(",brokerUrl=").append(brokerUrl); builder.append(",user=").append(user); return builder.toString(); } }
相关推荐
由于CopyOnWriteArrayList使用了final的ReentrantLock,所以确保了锁的不可变性,增强了并发安全性。 2. 获取锁,确保同一时刻只有一个线程能执行修改操作。 3. 检查是否需要扩容。如果当前数组已满,或者在某些...
另外,CopyOnWriteArrayList由于其"读写分离"的思想,遍历和修改操作分别作用在不同的list容器,所以在使用迭代器进行遍历时候,不会抛出ConcurrentModificationException异常。 CopyOnWriteArrayList容器的缺点是...
在Java中,CopyOnWriteArrayList(写入时复制数组列表)是线程安全的集合类,它实现了List接口,并使用了"写入时复制"的策略来保证线程安全性。 CopyOnWriteArrayList的主要特点是:在进行修改操作(例如添加、修改...
CopyOnWriteArrayList使用复制-on-write机制来实现线程安全。 阻塞队列和⽣产者-消费者模式是指在多线程环境下,使用阻塞队列来实现生产者-消费者模式。例如,在桌⾯搜索时,使用阻塞队列来实现生产者-消费者模式,...
CopyOnWriteArrayList使用写时复制机制,确保多个线程可以安全地访问该数组列表。 Thread安全 Thread安全是Java多线程编程中的一种设计理念,用于确保多个线程可以安全地共享数据和资源。Thread安全可以通过使用...
java遍历时可修改的容器CopyOnWriteArrayList
为了避免这种情况,可以使用`Iterator`进行迭代并使用`Iterator`的`remove()`方法,或者使用线程安全的集合,如`CopyOnWriteArrayList`,因为其迭代器允许并发修改,不会抛出此异常。 在选择线程安全的集合类时,...
然而,由于写操作的内存开销和性能问题,在选择使用 CopyOnWriteArrayList 时,应根据具体的使用场景进行权衡和选择。在读多写少的场景下,CopyOnWriteArrayList 可以发挥出色的性能;而在写操作较为频繁的场景下,...
在实际应用中,CopyOnWriteArrayList可以用来实现高并发的缓存系统,例如,在Web应用程序中,可以使用CopyOnWriteArrayList来存储用户的session信息,以便在高并发环境下快速的读取和写入数据。 ...
java中,List在遍历的时候,如果被修改了会抛出java.util.ConcurrentModificationException错误。 看如下代码: import java.util.ArrayList; import java.util.List; public class Resource3 { ...
CopyOnWriteArrayList适合在大量读取操作和少量写入操作的场景中使用,例如在读取密集型的应用程序中。在这种场景下,CopyOnWriteArrayList可以提供更高的性能和线程安全性。 CopyOnWriteArrayList是一个非常实用的...
### Java多线程与并发(14-26)-JUC集合-CopyOnWriteArrayList...综上所述,`CopyOnWriteArrayList`是一种非常适合在读多写少场景下使用的线程安全集合,通过牺牲一定的写操作性能和内存开销来换取更高的并发读取性能。
1. CopyOnWriteArrayList的简介 2. COW的设计思想 3. CopyOnWriteArrayList的实现原理 4. 总结 2.读线程间
目前上传的是CopyOnWriteArrayList.uml类图,包含该类的各个extends、implements的接口或者类
Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学院整理,动力节点口口相传的Java黄埔军校
CopyOnWriteArrayList是Java集合框架中的一个重要类,它是ArrayList的线程安全版本,特别适合于读多写少的并发场景。这个类通过一种称为“写时复制”(Copy-On-Write)的技术实现了读写分离,确保了在进行写操作时不会...
6. 使用场景: - 并发环境下,对列表的迭代器遍历操作要求不被修改操作打断(即“不可变迭代器”)的场景。 - 当需要快速的并发读取和偶尔的修改操作时,例如日志收集、统计计算等。 总的来说,...
ArrayList 是我们常用的工具类之一,但是在多...如果我们想在多线程情况下使用 ArrayList 怎么办?有以下几种办法: 用 Collections.SynchronizedList ; 用 JUC 下的 CopyOnWriteArrayList ; 先来看看 Synchron