Java没有源代码的同步集合~

简介:

存档~~~~

Synchronized,volatile,lock

锁定->[就绪队列,阻塞队列]

第一个是jvm等级达到。

与volatile所不同的是,后者不能从工作存储器写回到主存储器。

所以后者经常使用于类变量的同步

lock来说。在竞争资源激烈的情况下,效率最高。


引用下:http://zzhonghe.iteye.com/blog/826162

synchronized: 
在资源竞争不是非常激烈的情况下。偶尔会有同步的情形下,synchronized是非常合适的。原因在于,编译程序一般会尽可能的进行优化synchronize,另外可读性非常好,无论用没用过5.0多线程包的程序猿都能理解。

ReentrantLock: 
ReentrantLock提供了多样化的同步。比方有时间限制的同步,能够被Interrupt的同步(synchronized的同步是不能Interrupt的)等。在资源竞争不激烈的情形下,性能略微比synchronized差点点。

可是当同步很激烈的时候,synchronized的性能一下子能下降好几十倍。

而ReentrantLock确还能维持常态。



Atomic: 
和上面的类似,不激烈情况下,性能比synchronized略逊,而激烈的时候。也能维持常态。激烈的时候,Atomic的性能会优于ReentrantLock一倍左右。可是其有一个缺点,就是仅仅能同步一个值。一段代码中仅仅能出现一个Atomic的变量。多于一个同步无效。

由于他不能在多个Atomic之间同步。


附一下,高速查看源代码吧

package com.lean;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.TreeSet;
import java.util.Vector;

public class JavaSouse {
	public static void main(String[] args) {

/*
 * Collection->List,Set
 * Map
 */
		
//-----------Map接口-----------------
		/*
		 * !!!!继承Dictionary,实现Map接口了
		 * 负载因子0.75  容器长度11
		 * 阏值=容器量*负载因子
		 * 方法同步
		 * 超出阏值。扩增2倍newCapacity = oldCapacity * 2 + 1;
		 */
		Hashtable<String,String> ht= new Hashtable<String,String>();
		ht.put("0", "0");
		
		/*
		 * 继承AbstractMap,实现Map接口
		 * 方法不同步
		 * 2倍扩增
		 */
		HashMap<String,String>  hm=new HashMap<String,String>();
		hm.put("0", "0");
		
		/*
		 * synchronized实现同步
		 * 
		 */
		Collections.synchronizedMap(hm);
	
//---------------------Set接口	----------------基于Map接口实现的类实现的
		
		/*
		 *继承AbstractSet,实现Set
		 *方法不同步
		 * 集合内元素不同
		 * resize(2 * table.length);扩增2倍容量
		 */
		HashSet<String> hs=new HashSet<String>();
		hs.add("0");
		
		/*
		 * 
		 */
		LinkedHashSet<String > lhs=new LinkedHashSet<String>();
		lhs.add("0");
		/*
		 * 基于TreeMap实现
		 * 排序升序对象集--红黑树---2-3-4树预习下就非常easy学~
		 * 对于红黑树记住一句话吧~~~~~
		 * !!!!一颗跟和叶子为黑色。而且跟叶路径中不存在连续的红色,随意节点到叶子节点的全部路径有同样数量的黑色节点的自二叉平衡树
		 */
		TreeSet<String > ts=new TreeSet<String>();
		ts.add("0");
	
		
//---	List接口	-----------------------基于Array接口实现
		/*
		 *方法不同步
		 * object数组实现的,初始化容量10
		 * modCount记录改动的次数,数组迭代过程能够有效的推断失败并返回
		 * 扩增1.5倍
		 */
		ArrayList<String> al=new ArrayList<String>();
		al.add("0");
		
		LinkedList<String> ll=new LinkedList<String>();
		ll.add("00");
		
		/*
		 * 方法同步synchronized
		 * 默认10,扩增2倍:
		 * int newCapacity = (capacityIncrement > 0) ?(oldCapacity + capacityIncrement) : (oldCapacity * 2);
		 * 
		 */
		Vector<String> vt=new Vector<String>();
		vt.add("1");
		
		
	}
}


版权声明:本文博主原创文章。博客,未经同意不得转载。






本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4868071.html,如需转载请自行联系原作者


相关文章
|
9天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
33 3
|
3月前
|
算法 Java 数据处理
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。
从HashSet到TreeSet,Java集合框架中的Set接口及其实现类以其“不重复性”要求,彻底改变了处理唯一性数据的方式。HashSet基于哈希表实现,提供高效的元素操作;TreeSet则通过红黑树实现元素的自然排序,适合需要有序访问的场景。本文通过示例代码详细介绍了两者的特性和应用场景。
57 6
|
3月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
50 3
|
3月前
|
存储 Java 数据处理
Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位
【10月更文挑战第16天】Java Set接口凭借其独特的“不重复”特性,在集合框架中占据重要地位。本文通过快速去重和高效查找两个案例,展示了Set如何简化数据处理流程,提升代码效率。使用HashSet可轻松实现数据去重,而contains方法则提供了快速查找的功能,彰显了Set在处理大量数据时的优势。
42 2
|
26天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
44 5
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
47 4
|
2月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
40 2
|
2月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
2月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
2月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。