美文网首页
多线程6原子类

多线程6原子类

作者: RyanHugo | 来源:发表于2020-03-22 10:42 被阅读0次

代码

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();
        
    }
}

相关文章

  • 多线程6原子类

    代码

  • 多线程

    9.1java多线程的实现继承Tread类Thread 为Runnable 的子类,子类为多线程操作类,必须覆写r...

  • 【Java】【Thread多线程】概述

    多线程概述 通过子类继承开启多线程public class Demo { public static voi...

  • 多线程:原子类

    1.什么是原子类 原子类:一度认为原子是不可分割的最小单位,故原子类可以认为其操作都是不可分割。对多线程访问同一个...

  • Java 多线程与锁的运用

    Java 多线程主要是实现方式有: 1.Thread 子类继承Thread,成为Thread的子类,调用start...

  • Java锁机制

    Java多线程编程的入门篇,主要介绍volatile修饰词、Synchronized以及Lock及其子类 多线程编...

  • 原子类型与原子操作

    原子类型和原子操作 并行编程、多线程与C++11 常见的并行编程有多种模型:共享内存、多线程、消息传递等。 多线程...

  • java线程&和各种奇奇怪怪的锁

    1、Java线程 一、Java多线程常用的两种实现方法 1、 继承Thread类 子类继承Thread类具备多线程...

  • iOS开发之多线程(一)

    目录 概要 NSThread GCD NSOperation 多线程与锁 1.概要 进程 线程 多线程 多线程的原...

  • python——多线程

    多线程-threading 子类完成创建多线程 线程的执行顺序也是主线程和各个子线程随机执行,顺序不确定 线程对全...

网友评论

      本文标题:多线程6原子类

      本文链接:https://www.haomeiwen.com/subject/dbemyhtx.html