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

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

存档~~~~

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"); }}

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

你可能感兴趣的文章
Rabbitmq学习(一) Rabbitmq初探
查看>>
8月第一周B2B类网站排名:阿里巴巴持续领先
查看>>
IDC评述网:12月下旬国内域名注册商净增量Top10
查看>>
5月第一周全球域名解析商Top15:万网升至第7名
查看>>
架构优化 - 应用,MQ Broker,业务处理分层
查看>>
3月第3周网络安全报告:被篡改.COM网站占74.3%
查看>>
Spring Security之用户名+密码登录
查看>>
java JSplitPane设置比例
查看>>
批量操作Windows域用户
查看>>
shell脚本 接受用户参数 记录一下
查看>>
健脾祛湿的中成药有哪些?
查看>>
mongodb Index(2)
查看>>
HTML DOM 基本操作
查看>>
IIS下支持下载.exe文件
查看>>
桌面快捷方式打不开怎么办?用金山网盾可修复
查看>>
CXF WebService Hello World
查看>>
市场调研报告:企业级信息防泄漏大趋势
查看>>
济南企业短信平台的价格如何?
查看>>
requirejs
查看>>
jQuery.extend 函数详解
查看>>