存档~~~~

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没有源代码的同步集合~的更多相关文章

  1. Java多线程与并发库高级应用-同步集合

    ArrayBlockingQueue LinkedBlockingQueue 数组是连续的一片内存 链表是不连续的一片内存  传统方式下用Collections工具类提供的synchronizedCo ...

  2. java多线程中并发集合和同步集合有哪些?区别是什么?

    java多线程中并发集合和同步集合有哪些? hashmap 是非同步的,故在多线程中是线程不安全的,不过也可以使用 同步类来进行包装: 包装类Collections.synchronizedMap() ...

  3. Java多线程同步集合--并发库高级应用

    一.阻塞队列1.在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒2.ArrayBlockingQueue(效率高)和LinkedBlockingQueue是两个 ...

  4. Java多线程之同步集合和并发集合

    Java多线程之同步集合和并发集合 不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全. 同步集合类 Hashtable Vector 同 ...

  5. Java并发编程之同步/并发集合

    同步集合 Java中同步集合如下: Vector:基于数组的线程安全集合,扩容默认增加1倍(ArrayList50%) Stack:继承于Vector,基于动态数组实现的一个线程安全的栈 Hashta ...

  6. Java 中的同步集合与并发集合有什么区别?

    同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发 集合的可扩展性更高.在 Java1.5 之前程序员们只有同步集合来用且在多线程并发 的时候会导致争用,阻碍了系统的扩展性.Jav ...

  7. Java面试准备之探究集合

    摘要:之前虽然对集合框架一些知识点作了总结,但是想想面试可能会问源码,于是又大致研究了一下集合框架的一些实现类的源码,在此整理一下. 一.集合框架 二.深究实现类 1.ArrayList源码实现 Ar ...

  8. Java并发包之同步队列SynchronousQueue理解

    1 简介 SynchronousQueue是这样一种阻塞队列,其中每个put必须等待一个take,反之亦然.同步队列没有任何内部容量,甚至连一个队列的容量都没有.不能在同步队列上进行peek,因为仅在 ...

  9. Java并发编程:同步容器

    Java并发编程:同步容器 为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch). ...

随机推荐

  1. Android wear 初体验

    近期一直在研究android wear SDK,整体感受来说就是和现有的android 其它的开发SDK还是有非常多新的东西.比如手机终端与手表端的通信机制,手表端的UI规范.可是从开发本身来讲,还是 ...

  2. Hlg 1832 【线段树 && RMQ】.cpp

    题意: 在给出的区间内求出最大买进卖出的差价. 思路: 对于弱数据:维护一个从左到右的最大差价和最小值.即当发现当前值比最小值小的时候更新最小值,否则看一下当前值与之前最小值的差价是否比最大差价大,是 ...

  3. NYOJ 284 坦克大战 【BFS】+【优先队列】

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 Many of us had played the game "Battle city" ...

  4. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...

  5. httl开源JAVA模板引擎,动态HTML页面输出

    HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. ...

  6. c语言推断数是否是素数

    这是推断数是否是素数.网络版非常.我觉得有点问题.今天一个朋友问我这个问题.我知道,今天,我把自己的代码,非常实用哦!. #include<stdio.h> #include<mat ...

  7. SWT的TreeViewer和TableViewer的交互

    左边是一个TreeViewer,右边是一个TableViewer.当点击左边的treeitem的时候,右边的tableViewer要将该item的子节点信息显示出来.就像这样: 左边的treeView ...

  8. linux管理员

    sudo password 添加管理员用户,设置其密码. exit 退出管理员.

  9. poj1804(归并排序求逆序数)

    逆序数.也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(比如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同一时候,就说 ...

  10. Android至ViewPager添加切换动画——使用属性动画

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44200623 ViewPager作为Android最经常使用的的组件之中的一个.相 ...