Java 数据类型 之 线程安全的基本类型

来源:互联网 发布:python编码格式转换 编辑:程序博客网 时间:2024/05/29 02:54

     在使用多线程时,就不得不考虑线程安全问题了。 对于int,long 这种基本类型,是不具有线程安全的, 所以就特别期望能有一种线程安全的基本类型,类似使用redis 那样,在多线程中也丝毫不用考虑多线程问题。 最近,突然发现了原来java 也自带了线程安全的基本类型,包括: AtomicInteger, AtomicLong, AtomicBoolean, AtomicIntegerArray,AtomicLongArray; 等,感觉实在是太棒了。


1. 测试代码

package org.zgf.test;import java.util.concurrent.atomic.AtomicInteger;public class TestAtomic {public static void main(String[] args) {AtomicInteger atomicInteger = new AtomicInteger(1);int number = 0;//getAndAdd: 先获取值,再自增10,返回值为自增前的值number = atomicInteger.getAndAdd(10);System.out.println("getAndAdd       --> number:" + number + ", atomicInteger: " + atomicInteger);//getAndDecrement: 先获得值,再自减1,返回值为自减前的number = atomicInteger.getAndDecrement();System.out.println("getAndDecrement --> number:" + number + ", atomicInteger: " + atomicInteger);//getAndIncrement: 先获得值,再自增1,返回值为自增前的值number = atomicInteger.getAndIncrement();System.out.println("getAndIncrement --> number:" + number + ", atomicInteger: " + atomicInteger);//getAndSet: 先获得值,再赋值,返回值为赋值前的值number = atomicInteger.getAndSet(10);System.out.println("getAndSet       --> number:" + number + ", atomicInteger: " + atomicInteger);//addAndGet: 先自增,再返回值,返回值为自增后的值number = atomicInteger.addAndGet(10);System.out.println("addAndGet       --> number:" + number + ", atomicInteger: " + atomicInteger);//decrementAndGet: 先自减1,再获取返回值,返回值为自减后的值number = atomicInteger.decrementAndGet();System.out.println("decrementAndGet --> number:" + number + ", atomicInteger: " + atomicInteger);//incrementAndGet: 先自增1,再返回值,返回值为自增后的值number = atomicInteger.incrementAndGet();System.out.println("incrementAndGet --> number:" + number + ", atomicInteger: " + atomicInteger);//compareAndSet: 如果当前值为20,则设置为100boolean isSuccess = atomicInteger.compareAndSet(20, 100);System.out.println("compareAndSet: " + isSuccess);}}

2. 输出结果:

getAndAdd       --> number:1, atomicInteger: 11getAndDecrement --> number:11, atomicInteger: 10getAndIncrement --> number:10, atomicInteger: 11getAndSet       --> number:11, atomicInteger: 10addAndGet       --> number:20, atomicInteger: 20decrementAndGet --> number:19, atomicInteger: 19incrementAndGet --> number:20, atomicInteger: 20compareAndSet: true


1 0
原创粉丝点击