java防止并发的几种方法

java防止并发的几种方法,第1张

使用synchronized关键字3种使用方法:

修饰类方法,作用于当前实例加锁,进入方法要获取当前实例的锁

修饰静态方法,作用于当前实例加锁,进入方法要获取当前实例的锁

修饰代码块,指定加锁对象,给指定对象加锁,进入代码块要先获取指定对象的锁(synchronized参数要传入固定的对象才能起到作用)

使用原子 *** 作:

java 在 SDK atomic包下的提供了原子 *** 作的类,常用的有

AtomicBoolean

AtomicInteger

AtomicIntegerArray

AtomicIntegerFieldUpdater

AtomicLong

AtomicLongArray

AtomicLongfieldUpdater

AtomicMarkableReference

AtomicReference

AtomicReference

AtomicReferenceArray

AtomicReferenceFieldUpdater

AtomicStampedReference

DoubleAccumulator

DoubleAdder

LongAccumulator

LongAdder

Striped64

其中atomicboolean atomicinteger atomicreperence常用的方法及含义

get() 获取当前值

set()设置当前值

getAndSet(V newValue) 获取当前值并设置最新的值

compareAndSer(V expect,V update)如果expect与当前值相同就设置update为最新值

首先,为防止高并发带来的系统压力,或者高并发带来的系统处理异常,数据紊乱,可以以下几方面考虑:1、加锁,这里的加锁不是指加java的多线程的锁,是指加应用所和数据库锁,应用锁这边通常是使用redis的setnx来做,其次加数据库锁,因为代码中加了应用所,所以数据库不建议加悲观锁(排他锁),一般加乐观锁(通过设置一个seq_no来解决),这两个锁一般能解决了,最后做合理的流控,丢弃一部分请求也是必不可少的

1 在一定程度上是没问题的

2 Java中的Queue是一个接口,具体的实现类有很多,比如LinkedList、ArrayDeque等。

这些实现类在向队列中添加元素时,都有相应的容量限制,当达到容量上限时就会抛出异常。

但如果频繁添加数据,可能会导致队列的长度变得很长,从而占用大量的内存空间。

3 如果需要频繁添加数据,可以考虑使用具有自动扩容功能的队列,比如PriorityQueue或ConcurrentLinkedQueue。

这些队列在添加数据时,会自动扩容以容纳更多的元素,从而避免了容量限制的问题。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11779059.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存