浏览以下内容前,请点击并阅读 声明

并发集合

  java.util.concurrent包包含了许多对于java集合框架的补充,根据提供的接口可以将这些集合分为以下几类:

  • BlockingQueue 定义了先进先出(first in first out)的数据结构,如果对一个满的队列添加元素或者从一个空的队列中检索元素,则会造成超时,或者被阻塞。
  • ConcurrentMap 是java.util.Map的子接口,定义了一些原子操作。这些原子操作可以移除或者替换掉一个存在的键值对,或者增加一个键不存在的键值对。原子操作可以避免使用同步。通用的ConcurrentMap的实现是ConcurrentHashMap,其为HashMap的并发版本。
  • ConcurrentNavigableMap 是ConcurrentMap的子接口,支持近似匹配,标准的通用实现为ConcurrentSkipListMap,是TreeMap的并发版本。

  所有的这些集合可以通过在添加对象到集合的动作和后续的访问和移除动作间建立发生前关系,帮助避免内存一致性错误。

原子变量

  java.util.concurrent.atomic包定义了支持对于一个变量进行原子操作的类,其中所有的类都含有读和写的set和get方法,如同读写volatile变量一样,也就是说,对于同一个变量对应的set方法和接下来的get方法具有发生前关系。原子方法compareAndSet也具有这些内存一致性特征,就像对于整型原子变量使用的原子算数方法一样。原子变量使用方法如下例:

import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
//定义原子字段
private AtomicInteger c = new AtomicInteger(0); public void increment() {
c.incrementAndGet();
} public void decrement() {
c.decrementAndGet();
}
//返回基本类型
public int value() {
return c.get();
} }

并发随机数字

  JDK7中,java.util.concurrent包含一个方便的类,ThreadLocalRandom,因为有些程序希望在多个线程或者ForkJoinTask中使用随机数字,对于并发的访问,使用ThreadLocalRandom相对于Math.random()可以减少资源争夺,最终获得更优的性能。

  使用ThreadLocalRandom,只需要调用其静态方法current方法即可获得一个ThreadLocalRandom对象,然后再调用其中的一个方法获得一个随机数:

//nextInt方法可以指定两个整数以作上限和下限,以下返回4到77的随机整数
int r = ThreadLocalRandom.current().nextInt(4, 77);

java-并发-高级并发对象2的更多相关文章

  1. Java多线程编程核心技术---对象及变量的并发访问(一)

    synchronized同步方法 "非线程安全"其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是"脏读",也就是渠道的数据其实是被更改 ...

  2. Java高并发--安全发布对象

    Java高并发--安全发布对象 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 发布对像:使一个对象能够被当前范围之外的对象使用. 对象逸出:一种错误的发布.当一个对象 ...

  3. 【Java并发.4】对象的组合

    到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识.然而,我们并不希望对每一系内存访问都进行分析以确保程序是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序. 4.1 设 ...

  4. java处理高并发高负载类网站的优化方法

    java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...

  5. Java编程思想 - 并发

    前言 Q: 为什么学习并发? A: 到目前为止,你学到的都是有关顺序编程的知识,即程序中的所有事物在任意时刻都只能执行一个步骤. A: 编程问题中相当大的一部分都可以通过使用顺序编程来解决,然而,对于 ...

  6. JAVA的高并发基础认知 二

    一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...

  7. Java中多线程并发体系知识点汇总

    一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...

  8. [转]java处理高并发高负载类网站的优化方法

    本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...

  9. java之高并发与多线程

    进程和线程的区别和联系 从资源占用,切换效率,通信方式等方面解答 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元:而把传统的进程称为重型进程(H ...

  10. JAVA 多线程和并发学习笔记(三)

    Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Execut ...

随机推荐

  1. GridLayout 使用

    上次做了一个小键盘,请见:PopupWindow 使用. 效果是这样的: 可以看到,上面的按键是不一样大小的.因为是用LinearLayout布局,用的Button样式也是默认的.数字键和文字键的大小 ...

  2. sqlservcer行列互转

    普通行列转换 行转列 假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/---- ...

  3. 让VS2010支持Windows2000

      2015-10-20 14:21 375人阅读 评论(0) 收藏 举报  分类: 学习笔记(33)  技术心得(1)  用Visual Studio 2010编译的程序无法在Windows 200 ...

  4. JSON中eval与parse的区别

    json的的解析方法 (非原创) json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下: var jsonData = '{"data1":&q ...

  5. VS2008控件全部消失

    新建VS2008项目之后,本该位于工具箱的控件全部消失不见,只剩下"#13119"提示,修复方法如下: 注:不一定三步都需要用到,仅在当前步骤无效情况下才用到下一步 1.步骤一 ( ...

  6. WPF DataGrid 性能加载大数据

    WPF(Windows Presentation Foundation)应用程序在没有图形加速设备的机器上运行速度很慢是个公开的秘密,给用户的感觉是它太吃资源了,WPF程序的性能和硬件确实有很大的关系 ...

  7. Python之Web框架Django

    Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址  Python 下载地址:https://www.pyt ...

  8. getAttribute、setAttribute、removeAttribute

    1.函数语法 elementNode.attributes:属性返回包含被选节点属性的 NamedNodeMap. elementNode.getAttribute(name):方法通过名称获取属性的 ...

  9. prototype继承(1)

    如果替换了prototype对象, o.prototype = {};那么,下一步必然是为新的prototype对象加上constructor属性,并将这个属性指回原来的构造函数. o.prototy ...

  10. Git 常用操作和问题解决

    记录一下自己用git作为项目管理过程中常见的错误以及处理方法 1.git pull 出现问题 git pull出现的问题多为远程分支文件和本地冲突 错误提示:error: Your local cha ...