Java的并发编程:JDK5原子类的操作及其原理

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)

在Java的多线程中,synchronized关键字volatile关键字都能保证其原子性。但是呢,在JDK5之后呢,就提供了原子类来保证事务的原子性,主要的JDK5提供的原子类操作有

  • 原子类更新基本类型
  • 原子类更新数组
  • 原子类更新抽象类型
  • 原子类更新字段

这篇文章主要举例说明原子类如何进行基本的原子性操作。

JDK5原子类的路径位置

JDK5原子类的位于rt.jar包底下的java.util.concurrent.atomic下面,如下:

Java的并发编程:JDK5原子类的操作及其原理

Java的并发编程:JDK5原子类的操作及其原理

JDK5原子类更新基本类型

Java的并发编程:线程的安全性问题的分析借鉴一个例子,来用原子类更新基本类型:

package com.roocon.thread.t8;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicIntegerArray;
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
import java.util.concurrent.atomic.AtomicReference;

public class Sequence {
	
	private AtomicInteger value  = new AtomicInteger(0);
	private int [] s = {2,1,4,6};
	
	AtomicIntegerArray a = new AtomicIntegerArray(s);
	
	
	AtomicReference<User> user = new AtomicReference<>();
	
	AtomicIntegerFieldUpdater<User> old =  AtomicIntegerFieldUpdater.newUpdater(User.class, "old");

	
	/**
	 * @return
	 */
	public  int getNext() {
		User user = new User();
		System.out.println(old.getAndIncrement(user));
		System.out.println(old.getAndIncrement(user));
		System.out.println(old.getAndIncrement(user));

		a.getAndIncrement(2);
		a.getAndAdd(2, 10);
		return value.getAndIncrement();
	}
	
	public static void main(String[] args) {
		
		Sequence s = new Sequence();
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				while(true) {
					System.out.println(Thread.currentThread().getName() + " " + s.getNext());
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				while(true) {
					System.out.println(Thread.currentThread().getName() + " " + s.getNext());
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
		

		
	}

}

  
这里有一个use的类,如下:
package com.roocon.thread.t8;

public class User {

	private String name;

	public volatile int old;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getOld() {
		return old;
	}

	public void setOld(int old) {
		this.old = old;
	}

}

从上面的例子可以看出,主要的JDK5提供的原子类操作有

  • 原子类更新基本类型 (AtomicInteger)
  • 原子类更新数组 (AtomicIntegerArray)
  • 原子类更新抽象类型 (AtomicReference)
  • 原子类更新字段 (AtomicIntegerFieldUpdater)
  •   本文标题:Java的并发编程:JDK5原子类的操作及其原理 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/6640.html
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读