美文网首页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