当前位置:网站首页>Use of atomicinteger
Use of atomicinteger
2022-07-03 12:13:00 【zwanying】
AtomicInteger Use
Why java.util.concurrent.atomic.AtomicInteger
++i,–i Not thread safe , Three steps involved ,1、 obtain i value 2、 Carry out operations 3、 Write back the new value . multithreading , The results exceeded expectations .
AtomicInteger What methods are provided
The code comments indicate the methods provided . While using , Familiar with .
import static org.junit.Assert.*;
import java.util.concurrent.atomic.AtomicInteger;
public class Test {
public static void main(String args[]) throws InterruptedException {
final AtomicInteger value = new AtomicInteger(10);
// Get value
assertEquals(value.get(),10);
// Set the value
value.set(5);
assertEquals(value.get(),5);
// Compare and set
// Currently compared with expectations , Not equal, not updated .
assertEquals(value.compareAndSet(3, 2), false);
assertEquals(value.get(), 5);
// Currently compared with expectations , Equal update .
assertEquals(value.compareAndSet(5, 2), true);
assertEquals(value.get(), 2);
//++i
assertEquals(value.incrementAndGet(), 3);
//+n
assertEquals(value.getAndAdd(5),3);
assertEquals(value.get(),8);
//i++
assertEquals(value.getAndIncrement(),8);
assertEquals(value.get(),9);
//+n
assertEquals(value.addAndGet(2),11);
//--i
assertEquals(value.decrementAndGet(),10);
//i--
assertEquals(value.getAndDecrement(),10);
assertEquals(value.get(),9);
//i==n
assertEquals(value.getAndSet(6),9);
assertEquals(value.get(),6);
}
}
verification AtomicInteger Thread safety
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
class Test {
static int ivalue = 10;
public static void main(String args[]) throws InterruptedException {
// Use AtomicInteger, Thread safety
// ordinary ++i, Thread unsafe
final AtomicInteger value = new AtomicInteger(10);
final int threadSize = 50000;
Thread[] t = new Thread[threadSize];
for(int i=0;i<threadSize;i++){
t[i] = new Thread(){
@Override
public void run(){
value.incrementAndGet();
++ivalue;
}
};
}
for(Thread tt :t){
tt.start();
}
for(Thread tt: t){
tt.join();
}
assertEquals(value.get(),threadSize+10);//true
assertEquals(ivalue,threadSize+10);// When there are enough threads ,false
}
}
边栏推荐
- Apprendre à concevoir des entités logicielles réutilisables à partir de la classe, de l'API et du cadre
- 239. Sliding window maximum
- Develop plug-ins for idea
- Quantitative calculation research
- Wrong arrangement (lottery, email)
- OPenGL 基本知识(根据自己理解整理)
- 【mysql官方文档】死锁
- 网络通讯之Socket-Tcp(一)
- STL Tutorial 9 deep copy and shallow copy of container elements
- Symlink(): solution to protocol error in PHP artisan storage:link on win10
猜你喜欢

Introduction to the implementation principle of rxjs observable filter operator

Raven2 of vulnhub

4000 word super detailed pointer

Colleagues wrote a responsibility chain model, with countless bugs

PHP export word method (phpword)

Socket TCP for network communication (I)

Integer string int mutual conversion

LeetCode 0556.下一个更大元素 III - 4步讲完

OpenGL 绘制彩色的三角形

vulnhub之momentum
随机推荐
MySQL uses the method of updating linked tables with update
STL tutorial 8-map
OpenGL 索引缓存对象EBO和线宽模式
实现验证码验证
Vulnhub's Nagini
Shardingsphere sub database and sub table < 3 >
Shutter widget: centerslice attribute
Vulnhub's Tomato (tomato)
vulnhub之Nagini
During FTP login, the error "530 login incorrect.login failed" is reported
vulnhub之narak
ArcGIS application (XXI) ArcMap method of deleting layer specified features
DNS multi-point deployment IP anycast+bgp actual combat analysis
Redis notes 01: Introduction
网络通讯之Socket-Tcp(一)
Develop plug-ins for idea
Vulnhub's cereal
DEJA_VU3D - Cesium功能集 之 054-模拟火箭发射全过程
(构造笔记)GRASP学习心得
Fluent: Engine Architecture