- 浏览: 249519 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (192)
- 技术研究学习 (19)
- 工作总结 (4)
- spring3.x (11)
- mail (2)
- jar (2)
- FCKeditor (1)
- quartz (2)
- json (1)
- jdbc (5)
- struts2 (6)
- java基础 (18)
- jboss (3)
- IT名称解析 (1)
- 测试工具 (2)
- 工作趣谈 (1)
- 数据库 (8)
- js (8)
- jquery (1)
- mysql (20)
- Sql (3)
- Oracle (1)
- easyui (0)
- log4j (1)
- 源码研究 (1)
- Jasper Report (0)
- Jbpm4 (4)
- xml (1)
- ireport (0)
- javavm (1)
- sitemesh (5)
- compass (1)
- jvm (1)
- ext (1)
- lucene (0)
- cxf (1)
- Blazeds (0)
- Resteasy (1)
- jaxb (1)
- tomcat (1)
- Rmi (1)
- BoneCP (1)
- velocity (3)
- OSCache (1)
- EHCache (1)
- 高性能开发 (9)
- 设计模式 (0)
- 网络协议应用 (1)
- Ibatis (1)
- powerdesigner (1)
- 架构师之路 (2)
- memcached (4)
- MapReduce (1)
- 测试组 (1)
- 图像处理 (2)
- LoadRunner (2)
- 报表 (1)
- 负载均衡 (1)
- 分布式 (3)
- c# (1)
- java中一些特殊问题 (3)
- java 8 (1)
- Mogodb (1)
- 项目设计与实现 (2)
- Ubuntu (1)
- eclipse (1)
- gradle (1)
- 私有云 (1)
- redis (1)
- 移动前端 (1)
最新评论
Map map = Collections.synchronizedMap(new HashMap(1)); Collections.synchronizedList(new ArrayList()); private static class SynchronizedMap<K,V> implements Map<K,V>, Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability private static final long serialVersionUID = 1978198479659022715L; private final Map<K,V> m; // Backing Map final Object mutex; // Object on which to synchronize SynchronizedMap(Map<K,V> m) { if (m==null) throw new NullPointerException(); this.m = m; mutex = this; } SynchronizedMap(Map<K,V> m, Object mutex) { this.m = m; this.mutex = mutex; } public int size() { synchronized(mutex) {return m.size();} } public boolean isEmpty(){ synchronized(mutex) {return m.isEmpty();} } public boolean containsKey(Object key) { synchronized(mutex) {return m.containsKey(key);} } public boolean containsValue(Object value){ synchronized(mutex) {return m.containsValue(value);} } public V get(Object key) { synchronized(mutex) {return m.get(key);} } public V put(K key, V value) { synchronized(mutex) {return m.put(key, value);} } public V remove(Object key) { synchronized(mutex) {return m.remove(key);} } public void putAll(Map<? extends K, ? extends V> map) { synchronized(mutex) {m.putAll(map);} } public void clear() { synchronized(mutex) {m.clear();} } private transient Set<K> keySet = null; private transient Set<Map.Entry<K,V>> entrySet = null; private transient Collection<V> values = null; public Set<K> keySet() { synchronized(mutex) { if (keySet==null) keySet = new SynchronizedSet<K>(m.keySet(), mutex); return keySet; } } public Set<Map.Entry<K,V>> entrySet() { synchronized(mutex) { if (entrySet==null) entrySet = new SynchronizedSet<Map.Entry<K,V>>(m.entrySet(), mutex); return entrySet; } } public Collection<V> values() { synchronized(mutex) { if (values==null) values = new SynchronizedCollection<V>(m.values(), mutex); return values; } } public boolean equals(Object o) { synchronized(mutex) {return m.equals(o);} } public int hashCode() { synchronized(mutex) {return m.hashCode();} } public String toString() { synchronized(mutex) {return m.toString();} } private void writeObject(ObjectOutputStream s) throws IOException { synchronized(mutex) {s.defaultWriteObject();} } } 使用了Collections.synchronizedMap(new HashMap(1))就将非线程安全的变为线程安全的了,同时性能也降低了,但有些时候也并非那么完美,比如并发的时候: Map map = Collections.synchronizedMap(new HashMap(1)); if(map.containsKey("str")){ map.remove("str"); } jdk1.5新增了ConcurrentLinkedQueue、ConcurrentHashMap、CopyOnWriteArrayList 和CopyOnWriteArraySet对这些集合进行并发修改是安全的。
发表评论
-
jdk1.4,jdk1.5和jdk1.6的区别
2013-05-14 18:54 1202来源:http://blog.csdn.net/f ... -
Response.ContentType 详解
2013-03-13 09:45 1350不同的ContentType 会影响客户端所看到的效果.默认的 ... -
JAVA获取本地,远程macAddress
2013-02-27 13:56 976来源:http://www.2cto.com/kf/20110 ... -
java中断点续传
2013-02-22 15:38 1282转载自 http://www.ibm.com/ ... -
nio
2013-02-22 09:39 921来源http://blog.chinaunix.net ... -
使用非阻塞ServerSocketChannel、SocketChannel代替ServerSocket和Socket
2013-02-19 09:52 2570来源:http://blog.sina.com.cn/s/ ... -
java字符串编码类型获取
2012-10-05 10:11 934原创作品,允许转载,转载时请务必以超链接形式标明文章 ... -
Java网络编程总结
2012-09-29 14:42 0http://www.cnblogs.com/oubo/arc ... -
Java使用JNDI技术获取DataSource对象
2012-09-29 11:28 1219package common; imp ... -
Java并发包探秘 (二) ConcurrentHashMap
2012-09-27 10:49 948Java并发包中有很多精心设计的高并发容器。有Concur ... -
Java并发包探秘 (一) ConcurrentLinkedQueue
2012-09-27 10:47 1124Java并发包中有很多精心设计的高并发容器。有Conc ... -
Collections.synchronizedMap(new LinkedHashMap())
2012-09-27 10:24 1256LinkedHashMap和LinkedHashSet是J ... -
Java栈与堆
2012-08-16 12:26 730Java栈与堆 ----对这两 ... -
Java中对象的六种可触及状态
2012-08-20 14:07 10241. 强可触及 垃圾收集器不会回收强可触及对象占据的空间 ... -
多线程 sleep()和wait()的区别
2012-08-14 10:12 1024接触了一些多线程的东西,还是从java入手吧。 相信看这篇文 ... -
java oop
2012-08-14 10:13 870对象一般都有两个特征:状态和行为 类实质上定义的是一种数据类 ... -
override与overload
2012-08-14 10:12 724重载Overload特点(两必须一可以) public boo ... -
Java中堆栈和内存分配原理
2012-08-13 09:32 783来源:http://uule.iteye.com/blog/1 ...
相关推荐
然而,并非所有集合类都是线程安全的,这在多线程环境中可能导致数据不一致或者运行时异常。线程安全指的是一个对象在多线程环境下可以被正确地访问和修改,而不会出现竞态条件或死锁等问题。 线程不安全的集合类...
在Java编程中,多线程安全集合是程序员在并发环境下处理数据共享时必须考虑的关键概念。这些集合确保了在多个线程访问时的数据一致性、完整性和安全性,避免了竞态条件、死锁和其他并发问题。Java提供了一系列的线程...
Java 集合类线程安全 Java 集合框架是由 Java 平台标准版 1.2 引入的通用数据结构与算法框架。其灵活的面对对象设计受到了广大 Java 程序员的一致青睐,为 Java 平台的成熟奠定了坚实的基础。 线程安全不是一个...
2. 使用线程安全的集合:.NET框架提供了线程安全的集合类,如ConcurrentBag、ConcurrentQueue和ConcurrentStack等,它们在内部实现了线程同步,可以安全地在多线程环境下使用。 3. 避免在多线程环境中直接修改List...
在.NET框架中,C#提供了一系列的线程安全集合类,这些类被设计为在多线程环境下可以安全地进行数据操作。这些类是通过`System.Collections.Concurrent`命名空间提供的,确保了在并发访问时的数据一致性。让我们深入...
首先,Java提供了一种简单粗暴的方法,即使用synchronized关键字或者Collections.synchronizedMap()方法来使非线程安全的集合变得线程安全。但是,这种全局锁的机制在高并发环境下可能导致性能瓶颈,因为所有操作...
但是需要注意,虽然这个方法可以保证基本的线程安全,但迭代仍然是非线程安全的,即不能在遍历过程中修改Map。 2. 使用ConcurrentHashMap:Java从1.5版本开始引入了ConcurrentHashMap,它是线程安全且高并发性能的...
Java 集合的线程安全详解 Java 集合的线程安全是指在多线程环境中,集合操作的安全性。 Java 中有多种集合类,如 Vector、ArrayList、LinkedList、HashTable、HashMap、HashSet 等,这些集合类在多线程环境中的安全...
### JDK中线程安全的集合类详解 #### 1. 引言 在Java开发过程中,随着并发编程的日益普及,对于数据结构的选择也提出了更高的要求。非线程安全的数据结构如`HashMap`在高并发场景下可能会出现数据不一致等问题,这...
在构建线程安全应用程序时,除了使用同步机制和ThreadLocal变量,还可以使用并发集合和高级并发对象。比如,Java的ConcurrentHashMap是一个线程安全的哈希表实现,它通过分段锁机制来实现线程安全,并提供较高的并发...
在Java编程中,线程安全性和不安全性是并发编程中非常关键的概念。...在面对线程安全问题时,我们可以借助如`synchronized`关键字、`Collections.synchronizedList`等工具来增强集合的线程安全性。
3. 使用线程安全的集合类:C# 4.0引入了`System.Collections.Concurrent`命名空间,其中包含了许多线程安全的集合类型,如ConcurrentBag、ConcurrentQueue、ConcurrentStack等。它们设计为并发访问,无需额外的同步...
2. 使用线程安全的集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等。 3. 避免长时间持有锁,减少阻塞时间。 4. 优先使用更高粒度的同步,减少锁的使用范围。 5. 对于不可变对象,尽可能地使用它们,减少...
本文将深入探讨如何使用C++进行hiredis的封装,以实现线程安全的Redis客户端操作。 首先,hiredis是Redis官方提供的一个纯C语言的简单协议解析库,它专注于处理Redis命令和响应,而忽略了更高级别的抽象。为了在C++...
`golang-set`库提供了一种实现,包括线程安全和非线程安全的高性能集,非常适合在Go的并发环境中使用。 首先,我们要理解什么是线程安全和非线程安全。线程安全指的是在多线程环境下,一个函数或方法在同一时刻可以...
.NET Framework 4 提供了一组线程安全的集合类,这些类位于 `System.Collections.Concurrent` 命名空间中,旨在提高多线程环境下的性能和安全性。这些集合类允许开发者在无需额外同步代码的情况下安全地进行并发读写...
6. **并发集合(Concurrent Collections)**:如`ConcurrentBag`, `ConcurrentQueue`, `ConcurrentStack`等,这些集合类设计为线程安全的,允许多个线程并发添加和删除元素。 7. **异步编程(Async/Await)**:虽然...
- 原子类提供了线程安全的整型、长整型等基本类型操作,避免了使用锁带来的性能开销。 #### 十七、Java线程:新特征-障碍器 - **障碍器**: - `CyclicBarrier` 和 `CountDownLatch` 是两种常用的屏障类,用于...
虽然 `Vector` 在某些情况下可以满足需求,但由于其性能问题和潜在的线程安全陷阱,现代Java编程实践中更倾向于使用其他集合类,如 `ArrayList` 或并发集合类。理解不同集合类的特点及其适用场景对于编写高效、可靠...