java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)
线程安全性
原子性
Atomic包
案例
package com.keytech.task;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.LongAdder;
/**
* @className: AtomicTest
* @description: TODO 类描述
* @author: mac
* @date: 2020/12/27
**/
public class AtomicTest {
private static Integer clientTotal=5000;
private static Integer threadTotal=200;
private static AtomicInteger count=new AtomicInteger(0);
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
Semaphore semaphore= new Semaphore(threadTotal);
for (int i = 0; i
executorService.execute(()->{
try{
semaphore.acquire();
update();
semaphore.release();
}catch (Exception e){
e.printStackTrace();
}
});
}
executorService.shutdown();
System.out.println("count:"+count);
}
private static void update(){
count.incrementAndGet();
}
}
getAndAddInt源码
public final int getAndAddInt(Object var1, long var2, int var4) {
int var5;
do {
var5 = this.getIntVolatile(var1, var2);
} while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
return var5;
}
LongAddr
package com.keytech.task;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.LongAdder;
/**
* @className: LongAddrTest
* @description: TODO 类描述
* @author: mac
* @date: 2020/12/28
**/
public class LongAddrTest {
private static Integer clientTotal=5000;
private static Integer threadTotal=200;
private static LongAdder count=new LongAdder();
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
Semaphore semaphore=new Semaphore(threadTotal);
for (int i = 0; i < clientTotal; i++) {
try{
semaphore.acquire();
update();
semaphore.release();
}catch (Exception e){
e.printStackTrace();
}
}
executorService.shutdown();
System.out.println("count"+count);
}
private static void update(){
count.increment();
}
}
AtomicLong
package com.keytech.task;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicLong;
/**
* @className: AtomicLongTest
* @description: TODO 类描述
* @author: mac
* @date: 2020/12/28
**/
public class AtomicLongTest {
private static Integer clientTotal=5000;
private static Integer threadTotal=200;
private static AtomicLong count=new AtomicLong();
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
Semaphore semaphore=new Semaphore(threadTotal);
for (int i = 0; i < clientTotal; i++) {
try{
semaphore.tryAcquire();
update();
semaphore.release();
}catch (Exception e){
e.printStackTrace();
}
}
executorService.shutdown();
System.out.println("count"+count);
}
private static void update(){
count.incrementAndGet();
}
}
LongAddr与AtomicLong的区别
LongAddr与AtomicLong的使用场景
java 线程安全Long_【Java】线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)相关推荐
- 线程安全之原子性Atomic(AtomicInteger|LongAdder|AtomicLong)
线程安全性 当多线程访问某个类时,不管运行环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何的同步或者协同,这个类都能表现出正确的行为,那么这个类就是线程安全的. 原子性 提供 ...
- 动力节点Java培训告诉你Java线程的多功能用法
现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...
- java线程 同步与异步 线程池
1)多线程并发时,多个线程同时请求同一个资源,必然导致此资源的数据不安全,A线程修改了B线 程的处理的数据,而B线程又修改了A线程处理的数理.显然这是由于全局资源造成的,有时为了解 决此问题,优先考虑 ...
- Java并发编程 synchronized保证线程安全的原理
文章转载致博客 blog.csdn.net/javazejian/- 自己稍加完善. 线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源 ...
- Java多线程知识点整理(线程池)
2019独角兽企业重金招聘Python工程师标准>>> 1.线程池的使用 线程池一般配合队列一起工作,是线程池限制并发处理任务的数量.然后设置队列的大小,当任务超过队列大小时,通过一 ...
- Java 多线程(七) 线程间的通信
Java 多线程(七) 线程间的通信--wait及notify方法 线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务. Object类中相关的方法有两个notify方法 ...
- java队列怎么实现线程_Java中利用线程和队列实现入库操作
Java单线程中,如果需要大量的数据库操作,会在IO方面产生瓶颈,特别是数据库连接失败时,大量资源会消耗在数据库连接的检测上,从而使程序的实时响应速度变慢.解决的办法就是将数据库操作单独放置在一个线程 ...
- java线程安全性_Java并发-线程安全性
1.什么是线程安全性? 在线程安全性的定义中,最核心的就是正确性.当多线程访问调用某个类时,线程之间不会出现错误的交互,不管运行时线程如何交替执行,并且在主调代码不需要任何同步或协同,这个类都能表现出 ...
- 为什么阿里Java规约禁止使用Java内置Executors创建线程池?
IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒. 告诉你手动创建线程池,效果会更好. 在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有 ...
最新文章
- python使用方法-python中dict使用方法详解
- 关于C++14:你需要知道的新特性
- 排序之选择排序:简单选择+堆排序
- 怎么重置blockinput的锁_OPPOA9锁屏密码忘了怎么办? OPPO忘记锁屏密码的解决办法...
- mysql cpu高 重启无效_解决mysqlcpu高的问题
- 我又发现一个直接就能安装中文小红帽的方法
- ReactiveCocoa 5.0 初窥:可能是最痛的一次升级
- 黑马程序员_银行业务调度系统
- Java工程师的职业规划(最全版本)
- android studio JNI Cmake Erro at 运行失败
- MySQL数据库笔记
- 分析型数据库产品的排头兵GBase 8a
- HTML中的表格及样式的设置
- 编程学习了解:一个优秀的程序员必备的五点能力,你都满足了吗?
- kafka 启动时提示 /brokers/ids/1001 is: NODEEXISTS
- 电商项目的数据库表设计(MySQL版)
- 【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现
- 很贴心的一份,适合非科班入门计算机的课程路线
- 滴滴官网图片切换效果
- 在职人员如何发表期刊论文
热门文章
- SAX EntityResolver 的作用
- SDL 从内存流中加载图像并显示
- [转载]压岁钱年年涨的行情不要太纠结
- OpenCV-获取图像中圆线上的数据
- OpenCV-中值滤波cv::medianBlur
- php header是什么,学习猿地-php header什么意思
- linux在当前目录下打开终端,linux - 终端:在窗口中打开当前路径? - Ubuntu问答...
- matlab中load seamout,matlab中的save与load函数
- 测试人员必看——掌握7大技能,做好自动化测试就不是问题!
- java转动的风扇课程设计,课程设计—智能风扇设计报告