后台admin给用户加分,点的快了,会加两次分,在前台没限制的情况下,后台又不想用synchronized可以有两种解决办法
自己模块的util类加个 volatile的static变量
public static volatile isRunning = false;//静态变量,默认加分操作未进行
加分逻辑代码:
if(util.isRunning==false){
util.isRunning = true;//加分操作就在进行中了...
//逻辑代码
util.isRunning = false;//标志重新设定
}else{
//正在加分,这里就什么都不做
}
第二种,用AtomicBoolean
模块util类加上,
public static AtomicBoolean isRunning = new AtomicBoolean(false);//未执行的标志
加分逻辑代码:
if(util.AtomicBoolean.compareAndSet(false, true)){
//其实跟上边没啥两样,就是貌似看起来专业点...isRunning==false这时候执行逻辑
util.isRunning.set(false);//最后逻辑执行完了,再把标志设回false
}else{
//do nothing
}
util.AtomicBoolean.compareAndSet(false, true)只不过节省了util.isRunning = true;这句代码
分享到:
相关推荐
由于对象头的信息是与对象自身定义的数据没有关系的额外存储成本,因此考虑到JVM的空间效率,Mark Word 被设计成为一个非固定的数据结构,以便存储更多有效的数据,它会根据对象本身的状态复用自己的存储空间,如32...
很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,...
使用java模拟synchronzed的过程,模拟从无锁->偏向锁->轻量级锁->重量级锁->挂起->唤醒->继续抢锁,再模拟了各阶段的锁释放。(此代码不能运行,因为很多c++中的机制在java中不能实现)此代码仅用于学习synchronized的...
目录一、synchronized基础1.1synchronized的使用1.1示例1.2验证1.2.1 普通方法和代码块中使用this是同一个监视器(锁),即某个具体调用该代码的对象1.2.2 ...轻量级锁(1)轻量级锁加锁(2)轻量级锁解锁2.3.2一些补充
Tinylog是用于UNIX环境的轻量级C语言高性能日志组件,它是用于C / C ++的高性能,异步,线程安全和进程安全的日志库。 它支持日志归档,异步,多线程写入,多处理写入,非阻塞模式。 输出示例: [ 2018 - 04 - 03...
从思维导图的角度将 Java 关键字 Synchronized进行分析整理,含盖CAS、偏向锁、轻量级锁、重量级锁及锁升级,同时附加了常见问题整理
性能的改善得益于 偏向锁、轻量级锁 的引入,它们具体的实现方式可参考《Java并发编程的艺术》和《深入理解Java虚拟机》这两本书。偏向锁、轻量级锁和重量级锁不同的地方在于不是通过信号量机制(强制阻塞)而是...
* [轻量级锁](#轻量级锁) * [自旋锁](#自旋锁) * [自适应自旋锁](#自适应自旋锁) * [锁消除](#锁消除) * [锁粗化](#锁粗化) * [死锁](#死锁) * [如何避免死锁?](#如何避免死锁) * [volatile](#volatile) * ...
主要介绍了Java 并发编程学习笔记之Synchronized底层优化的相关资料,主要包含了重量级锁,轻量级锁,偏向锁和其他优化等方面,有需要的小伙伴可以参考下
volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized,volatile有synchronized可见性的特性,但没有synchronized原子性的特性。 可见性即用volatile关键字修饰的成员变量表明...
CAS(Compare And Swap )是乐观锁的一种实现方式,是一种轻量级锁。JAVA1.5开始引入了CAS,JUC下很多工具类都是基于CAS。 CAS的实现方式 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和...
1.偏向锁 2.轻量级锁 3.锁的优缺点对比
volatile 关键字是线程同步的轻量级实现,所以volatile 性能肯定比synchronized关键字要好。但是volatile 关键字只能用于变量而 synchronized 关键字可以修饰方法以及代码块 volatile 关键字能保证数据的可见性,但...
Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性...
synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制。JMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存...
加锁可以使一段代码在同一时间只有一个线程可以访问,在增加安全性的同时,牺牲掉的是程序的执行性能,所以为了在一定程度上减少获得锁和释放锁带来的性能消耗,在 jdk6 之后便引入了“偏向锁”和“轻量级锁”,所以...
此实现为解锁代码提供了一个轻量级的解决方案,它仅因有序/顺序要求而同步。 用例 // called by multiple threads (e.g. thread pool) public void execute() { FooInput input; synchronized ( this ) { // ...
偏向锁/轻量级锁/重量级锁的原理 ReentractLock synchronized与ReentractLock区别 volatile 线程池原理和参数配置 内存的多级缓存机 CAS 容器 HashMap 1.7和1.8的区别,resize过程,多线程的问题 ConcurrentHashMap ...
主要介绍了java 高并发中volatile的实现原理的相关资料,在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”,需要的朋友...
公平锁、非公平锁、读写锁、共享锁、互斥锁、自旋锁、偏向锁、轻量级锁、重量级锁 锁什么?锁代码块还是锁对象? 上锁就是改变对象的对象头 对象头是所有对象开头的公共部分。 对象头由两个词组成。 第一个词是Mark...