Java高级特性系列--Concurrent

转载自 http://www.cnblogs.com/skywang12345/p/java_threads_category.html

JUC:java.util.concurrent

一,JUC原子类

根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。

1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;
2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;
3. 引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;
4. 对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。

这些类存在的目的是对相应的数据进行原子操作。所谓原子操作,是指操作过程不会被中断,保证数据操作是以原子方式进行的。

AtomicLong:

AtomicLong是作用是对长整形进行原子操作。
在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。

示例:

package com.util.concurrent.atomic;

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        AtomicLong mAtoLong = new AtomicLong();
        mAtoLong.set(0x0123456789ABCDEFL);
        System.out.println("toString()" + mAtoLong.toString());
        System.out.println("get()" + mAtoLong.get());
        System.out.println("intValue()" + mAtoLong.intValue());
        System.out.println("longValue()" + mAtoLong.longValue());
        System.out.println("incrementAndGet()" + mAtoLong.incrementAndGet());
        System.out.println("getAndIncrement()" + mAtoLong.getAndIncrement());
        System.out.println("decrementAndGet()" + mAtoLong.decrementAndGet());
        System.out.println("getAndDecrement()" + mAtoLong.getAndDecrement());
        System.out.println("get()" + mAtoLong.get());
        System.out.println("addAndGet()" + mAtoLong.addAndGet(0x10));
        System.out.println("getAndAdd()" + mAtoLong.getAndAdd(0x10));
        System.out.println("getAndSet()" + mAtoLong.getAndSet(0x0123456789ABCDEEL));
        System.out.println("compareAndSet()" + mAtoLong.compareAndSet(0x0123456789ABCDEEL, 0x0123456789ABCDEDL));
        System.out.println("get()" + mAtoLong.get());
    }

}

结果:

toString()81985529216486895
get()81985529216486895
intValue()-1985229329
longValue()81985529216486895
incrementAndGet()81985529216486896
getAndIncrement()81985529216486896
decrementAndGet()81985529216486896
getAndDecrement()81985529216486896
get()81985529216486895
addAndGet()81985529216486911
getAndAdd()81985529216486911
getAndSet()81985529216486927
compareAndSet()true
get()81985529216486893
时间: 2024-10-09 20:25:22

Java高级特性系列--Concurrent的相关文章

Java高级特性系列--多线程

多线程相关概念: 线程的5种状态: 1,新建状态(New):线程对象被创建之后,就进入了新建状态.Thread thread = new Thread(); 2,  就绪状态(Runnable):可执行状态,线程对象被创建后,其他线程调用了该对象的start()方法,该线程就启动了.处于就绪状态,随时可能被CPU调度执行. 3,运行状态(Running):线程获取到CPU正在执行.线程只能从就绪状态转为运行状态,不能从其他状态进入运行状态. 4,阻塞状态(Blocked):阻塞状态是线程因为某种

Java并发编程系列 concurrent包概览

从JDK 1.5开始,增加了java.util.concurrent包,concurrent包的引入大大简化了多线程程序的开发. 查看JDK的API可以发现,java.util.concurrent包分成了三个部分,分别是java.util.concurrent.java.util.concurrent.atomic和java.util.concurrent.lock. >>Atomic包 API中的说明是“A small toolkit of classes that support loc

Java高级特性—锁

1).synchronized 加同步格式: synchronized( 需要一个任意的对象(锁) ){ 代码块中放操作共享数据的代码. } synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.    如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,    等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程释

Java高级特性 第6节 注解(初步认识)

转自https://www.cnblogs.com/xdp-gacl/p/3622275.html的博客 一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts2有一部分也是基于注解的了,注解是一种趋势,现在已经有不少的人开始用注解了,注解是JDK1.5之后才有的新特性 JDK1.5之后内部提供的三个注解 @Deprecated 意思是“废弃的,过时的

Java 高级特性: Lambda 表达式

本文源代码上传到了码云,请点击 LambdaExpression 获取.Lambda 表达式是 java 8 的新特性,本文讲解了 lambda 表达式的所有知识.内容涉及到 lambda 表达式是什么, lambda 表达式用在何处,在 GUI 应用程序中使用 lambda 表达式,lambda 表达式语法,变量访问权限,目标类型,序列化,方法引用等.

java高级特性--注解,这也许是最简单易懂的文章了

博主在初学注解的时候看到网上的介绍大部分都是直接介绍用法或者功能,没有实际的应用场景,篇幅又很长导致学习的时候难以理解其意图,而且学完就忘QAQ.本篇文章中我将结合实际的应用场景尽可能由浅入深,平缓的介绍java注解. java注解是jdk1.5以后新出的特性,对于它的应用非常广泛,我们首先来看一下注解的应用,百度百科上这样说: 我们可以看到,注解的作用有三方面: 编写doc文档:这个就我们很常用的 @return 以及 @author,加了这些注解以后,就可以用jdk帮我们自动生成对应的API

Java高级特性——注解,这也许是最简单易懂的文章了

java注解是jdk1.5以后新出的特性,对于它的应用非常广泛,我们首先来看一下注解的应用,百度百科上这样说: 我们可以看到,注解的作用有三方面: 编写doc文档:这个就我们很常用的 @return 以及 @author,加了这些注解以后,就可以用jdk帮我们自动生成对应的API文档了 编译检查:这个也很常见 @Override,而且功能很强大,我将会在以后的文章中介绍 进行代码分析:这是本篇文章的重点.这个和编译检查一样也是一个强大的功能,但相比与编译检查由于其用到了反射,在性能上存在一些问题

Java高级特性 第1节 集合框架和泛型

Java中,存储多个同类型的数据,可以用数组来实现,但数组有一些缺陷: 数组长度固定不变,布恩那个很好的适应元素数量动态变化的情况 可以通过数组.length获取数组长度,却无法直接获取数组中实际存储的元素个数 数组采用在内存中分配连续空间的方式存储,根据元素信息查找时的效率比较低,需要多次比较 Java提供了一套性能优良.使用方便的接口和类,他们都位于java.util包中. 一.Java中的集合 Java集合类主要由Map接口和Collection接口派生而来,Collection接口有两个

Java高级特性 第8节 网络编程技术

一.网络概述 1.网络的概念和分类 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输.Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程.下面先对网络编程的一些基础知识进行介绍,最后给出使用Java语言进行网络编程的实例. 按照地理覆盖范围,计算机网络可以分为局域网(LAN).城域网(MAN).广域网(WAN). 2