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"); }
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
Java没有源代码的同步集合~的更多相关文章
- Java多线程与并发库高级应用-同步集合
ArrayBlockingQueue LinkedBlockingQueue 数组是连续的一片内存 链表是不连续的一片内存 传统方式下用Collections工具类提供的synchronizedCo ...
- java多线程中并发集合和同步集合有哪些?区别是什么?
java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...
- Java多线程同步集合--并发库高级应用
一.阻塞队列1.在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒2.ArrayBlockingQueue(效率高)和LinkedBlockingQueue是两个 ...
- Java多线程之同步集合和并发集合
Java多线程之同步集合和并发集合 不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全. 同步集合类 Hashtable Vector 同 ...
- Java并发编程之同步/并发集合
同步集合 Java中同步集合如下: Vector:基于数组的线程安全集合,扩容默认增加1倍(ArrayList50%) Stack:继承于Vector,基于动态数组实现的一个线程安全的栈 Hashta ...
- Java 中的同步集合与并发集合有什么区别?
同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发 集合的可扩展性更高.在 Java1.5 之前程序员们只有同步集合来用且在多线程并发 的时候会导致争用,阻碍了系统的扩展性.Jav ...
- Java面试准备之探究集合
摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...
- Java并发包之同步队列SynchronousQueue理解
1 简介 SynchronousQueue是这样一种阻塞队列,其中每个put必须等待一个take,反之亦然.同步队列没有任何内部容量,甚至连一个队列的容量都没有.不能在同步队列上进行peek,因为仅在 ...
- Java并发编程:同步容器
Java并发编程:同步容器 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch). ...
随机推荐
- Linux ssh密钥自动登录(转)
在开发中,经常需要从一台主机ssh登陆到另一台主机去,每次都需要输一次login/Password,很繁琐.使用密钥登陆就可以不用输入用户名和密码了 实现从主机A免密码登陆到主机B,需要以下几个步骤: ...
- 关于matlab矩阵卷积conv2和傅里叶变换求卷积ifft2的关系
先定义两个矩阵 a = [1 2 3 5 ; 4 7 9 5;1 4 6 7;5 4 3 7;8 7 5 1] %a矩阵取5*4 b = [1 5 4; 3 6 8; 1 5 7] %b矩阵如多数 ...
- GIS Tools for Hadoop 详细介绍
2013年Esri美国在开发者大会上演示了GIS数据结合Hadoop分析的一个示例,这个示例赢得了听众的阵阵掌声,我们也许对GIS不是很陌生,但是对Hadoop却不是很清楚,其实Esri是用Java开 ...
- AntiXSS - 支持Html同时防止XSS攻击
AntiXSS - 支持Html同时防止XSS攻击 跨站脚本攻击(XSS)已经不是什么新鲜的话题了,甚至很多大公司也为此吃尽苦头.最简单直接的防范方法,就是不允许任何html标签输入,对用户输入进行编 ...
- tomcat dbcp 基于jndi当配置java.sql.SQLException: Already closed
最近发现了一个现象,观察到的生产环境,不要有一段时间操作,然后另一个操作,首先将有一个数据库连接:java.sql.SQLException: Already closed.,例如下列: error ...
- MVAPI第一个版本架构图
MVAPI采用矢量与栅格结合的方式进行移动地图的显示. 进过几个月,目前终于可以完成基本的地图显示及操作功能.还有待实现的是各种性能及效果优化.3D地物等. 发一个1.0的架构图留存一下.(虽然目前还 ...
- Scala的XML操作
8. XML 8.1. 生成 Scala原生支持xml,就如同Java支持String一样,这就让生成xml和xhtml非常easy优雅: val name = "james ...
- 收藏的Android很好用的组件或者框架。
收藏的Android很好用的组件或者框架. android框架 先说两个站点: http://www.androidviews.net/ 非常好的国外开源码站,就是訪问速度有点慢啊 http://w ...
- 算法学习 - 图的广度优先遍历(BFS) (C++)
广度优先遍历 广度优先遍历是非经常见和普遍的一种图的遍历方法了,除了BFS还有DFS也就是深度优先遍历方法.我在我下一篇博客里面会写. 遍历过程 相信每一个看这篇博客的人,都能看懂邻接链表存储图. 不 ...
- 《JavaScript设计模式与开发实践》读书笔记之享元模式
1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传, ...