链接:https://www.jianshu.com/p/bc7b6f14984e
1、为什么使用AtomicInteger
- AtomicReference等原子类的类,主要用于在高并发环境下的高效程序处理,来帮助我们简化同步处理.
- 在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);
});
}
}
网友评论