java-并发-高级并发对象2
浏览以下内容前,请点击并阅读 声明
并发集合
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的更多相关文章
- Java多线程编程核心技术---对象及变量的并发访问(一)
synchronized同步方法 "非线程安全"其实会在多个线程对同一个对象中的实例变量进行并发访问时发生,产生的后果就是"脏读",也就是渠道的数据其实是被更改 ...
- Java高并发--安全发布对象
Java高并发--安全发布对象 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 发布对像:使一个对象能够被当前范围之外的对象使用. 对象逸出:一种错误的发布.当一个对象 ...
- 【Java并发.4】对象的组合
到目前为止,我们已经介绍了关于线程安全与同步的一些基础知识.然而,我们并不希望对每一系内存访问都进行分析以确保程序是线程安全的,而是希望将一些现有的线程安全组件组合为更大规模的组件或程序. 4.1 设 ...
- java处理高并发高负载类网站的优化方法
java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF ...
- Java编程思想 - 并发
前言 Q: 为什么学习并发? A: 到目前为止,你学到的都是有关顺序编程的知识,即程序中的所有事物在任意时刻都只能执行一个步骤. A: 编程问题中相当大的一部分都可以通过使用顺序编程来解决,然而,对于 ...
- JAVA的高并发基础认知 二
一.JAVA高级并发 1.5JDK之后引入高级并发特性,大多数的特性在java.util.concurrent 包中,是专门用于多线程发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发 ...
- Java中多线程并发体系知识点汇总
一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种 ...
- [转]java处理高并发高负载类网站的优化方法
本文转自:http://www.cnblogs.com/pengyongjun/p/3406210.html java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,ja ...
- java之高并发与多线程
进程和线程的区别和联系 从资源占用,切换效率,通信方式等方面解答 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元:而把传统的进程称为重型进程(H ...
- JAVA 多线程和并发学习笔记(三)
Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Execut ...
随机推荐
- MVC中渲染页面
mvc中当返回的字符带有html代码的时候,可以直接使用@Html.Raw(Model.description)这句代码的意思就是返回不是html编码,因此用了这句代码就不需要单独再转换一次
- C++程序设计基础
01 1 预编译常用的有,宏定义和包含库.2 库:是实用工具的集和,由程序员编写,可以完成一些特定的功能.3 <> 系统库 ""用户自定义库.4 宏定义:定义符号常量, ...
- 修改git remote url
$ ssh -v wangz@gitlab.alibaxx-inc.com $ git remote ali set-url git@gitlab.alibaxx-inc.com:youk-aaa/x ...
- tab 切换写法
<script> var oUL = document.getElementById('aboutTab-ul'); var oLi = oUL.getElem ...
- Eclipse使用技巧
1,整体缩进 右缩进:选中+Tab 左缩进:选中+ Shift+Tab 2,Ctrl+O列出当前类所有方法和属性
- C#高级编程笔记 2016年10月26日 MVC入门 Controller
1.MVC的定义: Models: Classes that represent the data of the application and that use validation logi ...
- Java对象的深拷贝和浅拷贝、集合的交集并集
http://blog.csdn.net/lian_1988/article/details/45970927 http://www.cnblogs.com/yxnchinahlj/archive/2 ...
- Unity 碰撞的例子
1.新建一个3D的Unity工程. 2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Cap ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- Appium 三种wait方法(appium 学习之改造轮子)
前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html 知乎Android客户端登陆:htt ...