
使用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。
这些队列在添加数据时,会自动扩容以容纳更多的元素,从而避免了容量限制的问题。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)