博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java没有源代码的同步集合~
阅读量:6264 次
发布时间:2019-06-22

本文共 2438 字,大约阅读时间需要 8 分钟。

存档~~~~

Synchronized,volatile,lock

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

第一个是jvm等级达到。

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

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

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

引用下:

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


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

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

你可能感兴趣的文章
微信公众账号怎么快速增加粉丝
查看>>
HBase 笔记1
查看>>
loadrunner两个函数:取参数长度和时间戳函数
查看>>
Docker exec与Docker attach
查看>>
解决ssh登录Host key verification failed
查看>>
Java8新特性之二:方法引用
查看>>
记录日常Linux常用软件
查看>>
Jmeter之Bean shell使用(一)
查看>>
[翻译]利用顶点位移的VR畸变校正
查看>>
wp socket tcp链接
查看>>
asp.net 批量下载实现(打包压缩下载)
查看>>
解决了!我滴神哪!MarketPlace为什么手动下载安装部署提示invalid详解
查看>>
主成分分析原理及推导
查看>>
python中获取指定目录下所有文件名列表的程序
查看>>
HTML5的本地存储 LocalStorage
查看>>
safari和ie的时间解析(显示为NAN)
查看>>
基于 HTML5 WebGL 的挖掘机 3D 可视化应用
查看>>
Java工具创建密钥库,用于Unity 3D打包、签名、发布
查看>>
Oracle用户解锁
查看>>
MongoDB的使用
查看>>