多线程6原子类

代码

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

public class Sequence {

    private AtomicInteger value = new AtomicInteger();
    private int s[]={2,1,4,5,6};
    AtomicIntegerArray a = new AtomicIntegerArray(s);
    AtomicReference<User> user = new AtomicReference<User>();
    AtomicIntegerFieldUpdater<User> old = AtomicIntegerFieldUpdater.newUpdater(User.class, "old");
    /*
     *  public final int getAndUpdate(IntUnaryOperator updateFunction) {
        int prev, next;
        do {
            prev = get();
            next = updateFunction.applyAsInt(prev);
        } while (!compareAndSet(prev, next));
        return prev;
    }底层采用cas操作,获取当前值和预期的下个值,cas比较,为真则返回
     * 
     */
    public int getNext(){
        return value.getAndIncrement();             
    }
    
    public void getArrayNexy(){
        
        old.getAndIncrement(new User());
//      数组第二个位置的元素加10
        a.addAndGet(1, 10);
        a.getAndIncrement(1);
    }
    
    public static void main(String[] args) {
        Sequence s = new Sequence();
        
        
        new Thread(new Runnable() {
            
            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (true) {
                    System.out.println(Thread.currentThread().getName() + " "+s.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }
        }).start();
        
        new Thread(new Runnable() { 
            @Override
            public void run() {
                // TODO Auto-generated method stub
                while (true) {
                    System.out.println(Thread.currentThread().getName() + " "+s.getNext());
                    try {
                        Thread.sleep(100);
                    } catch (Exception e) {
                        // TODO: handle exception
                    }
                }
            }
        }).start();
        
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在引入volatile、原子类、synchronized前,我们先来说说Java内存模型的三大特性:可见性、原子性...
    俗人浮生阅读 3,816评论 0 5
  • 1.什么是原子类 原子类:一度认为原子是不可分割的最小单位,故原子类可以认为其操作都是不可分割。对多线程访问同一个...
    JBryan阅读 3,012评论 0 0
  •  在介绍juc中的原子类之前,先看看官方文档对java.util.concurrent.atomic包的介绍官方文...
    szhlcy阅读 1,819评论 0 0
  • 原子类在具有有逻辑性的情况下输出结果也具有随机性 程序的运行结果为: 打印顺序出错了,应该是每加1次100再加1次...
    农家男孩阅读 2,738评论 0 0
  • 在你痛苦的日子里 我不知道 我在微博上写 只出现过几天的人 却这么深刻 我好想你 我不是一点也不想 我好想你可以看...
    闫梦媛阅读 619评论 0 0

友情链接更多精彩内容