美文网首页android技术
AtomicInteger (计数器)的用法

AtomicInteger (计数器)的用法

作者: HAO延WEI | 来源:发表于2020-07-01 10:53 被阅读0次

链接:https://www.jianshu.com/p/bc7b6f14984e

1、为什么使用AtomicInteger

    1. AtomicReference等原子类的类,主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理.
    1. 在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

AtomicInteger介绍

AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减。


AtomicInteger使用场景

AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下的使用。

引入

import java.util.concurrent.atomic.AtomicInteger;

获取和赋值

atomicInteger.get(); //获取当前值
atomicInteger.set(999); //设置当前值

getAndAdd()方法与AddAndGet方法

       AtomicInteger atomicInteger = new AtomicInteger(123);
       System.out.println(atomicInteger.get());  --123

       System.out.println(atomicInteger.getAndAdd(10)); --123 获取当前值,并加10
       System.out.println(atomicInteger.get()); --133

       System.out.println(atomicInteger.addAndGet(10)); --143 获取加10后的值,先加10
       System.out.println(atomicInteger.get()); --143

getAndDecrement()和DecrementAndGet()方法

        AtomicInteger atomicInteger = new AtomicInteger(123);
        System.out.println(atomicInteger.get());   --123

        System.out.println(atomicInteger.getAndDecrement()); --123 获取当前值并自减
        System.out.println(atomicInteger.get());  --122


        System.out.println(atomicInteger.decrementAndGet()); --121 先自减再获取减1后的值
        System.out.println(atomicInteger.get()); --121

getAndIncrement() 计数方法

import org.jsoup.Jsoup;
import java.util.ListIterator;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import us.codecraft.xsoup.Xsoup;
import java.util.concurrent.atomic.AtomicInteger;


public class XsoupPathUtil {

    public static String jsoupHtml(String url) {
        String html = null;
        try {
            Document doc = Jsoup.connect(url)
                    .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36")
                    .header("Accept-Encoding", "gzip,deflate,sdch")
                    .header("Host","m.baidu.com")
                    .header("Referer", "https://www.baidu.com")
                    .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9")
                    .get();
            html = doc.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return html;
    }

    public static void main(String[] args) {
        String url = "http://youjia.chemcp.com/index.asp";
        String html = jsoupHtml(url);
        org.jsoup.nodes.Document dom = Jsoup.parse(html);
        AtomicInteger atomicInteger = new AtomicInteger(1);
        String multixpath = "//*[@id=\"box\"]/div[1]/div[1]/div[2]/table/tbody/tr";
        ListIterator<Element> elementListIterator = Xsoup.select(dom, multixpath).getElements().listIterator();
        System.out.println(elementListIterator);
        elementListIterator.forEachRemaining(element -> {

            System.out.println("==================");
            String text = Xsoup.compile("//td[1]").evaluate(element).getElements().first().text();
            int andAccumulate = atomicInteger.getAndIncrement();

            String num = String.valueOf(andAccumulate);
            System.out.println(num+":"+text);

        });

    }

}

相关文章

网友评论

    本文标题:AtomicInteger (计数器)的用法

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