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 ...
随机推荐
- 码云以及git使用
码云的使用方法以及git的连用 创建公钥的方法 打开码云,点击个人资料---->SSH公钥---->点击怎样生成公钥 SSH Keys ssh keys可以让你在你的电脑和Git@OSC知 ...
- EXTJS中grid的数据特殊显示,不同窗口的数据传递
//EXTJS中grid的数据特殊显示renderer : function(value, metaData, record, rowIndex, colIndex, store, view) { v ...
- Makefile的编写
makefile介绍 makefile的功能是管理源文件的编译链接,在makefile我们可以定义一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能 ...
- [BZOJ1552][Cerc2007]robotic sort
[BZOJ1552][Cerc2007]robotic sort 试题描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数 ...
- APP支付报错ALI40247处理方案!
简直日狗!这里要吐槽支付宝: 1.支付宝文档太复杂,分类虽然详细,但是我找不到app支付 对应服务端的demo 2.提供下载的sdk都是全整合的 用下来都是一条龙服务,还有一些客户端(app)的请求也 ...
- Java图片处理 Thumbnails框架
一.设置图片的缩放比例或者图片的质量比 第一步:导入maven的jar包 <dependency> <groupId>net.coobird</groupId ...
- 20个Mac用户必须掌握的触摸手势
我第一次接触MacBook时,最令我惊叹的就是MacBook的触摸板,通过各种手势,完全可以不用鼠标,且有些时候更加的快捷和方便.那么都有哪些手势呢?可以通过 -> 来查看学习各种手势的使用,下 ...
- 算法练习_图的连通性问题(JAVA)
一.问题 1.问题描述: 有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系. 动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最 ...
- 让IE8支持placeholder
$(function(){ if(!placeholderSupport()){ // 判断浏览器是否支持 placeholder $('[placeholder]').focus(function( ...
- mysql 基础使用
mysql服务器本地root用户默认没有密码,使用 "mysql -u root -p" 即可登陆.linux本地用户可以以任意用户名登陆mysql,但是没有任何权限,没有意义.m ...