我有一台状态机 - 待定并完成 - AtomicLong(线程)。我需要以原子方式递减挂起和递增
private final AtomicLong pending = new AtomicLong();
private final AtomicLong completed = new AtomicLong();
void markComplete() {
this.pending.decrementAndGet();
this.completed.incrementAndGet();
}
我可以通过使用块同步来制作这个原子。但这似乎打败了使用并发对象的使用。
synchronized void markComplete() {
this.pending.decrementAndGet();
this.completed.incrementAndGet();
}
我想知道是否有更狡猾的方式这样做?
感谢您的帮助。
答案 0 :(得分:1)
如果select sum(income),id_cust,to_char(incomedate,'YYYY') year
from customertable
group by id_cust,to_char(incomedate,'YYYY')
和pending
符合complete
范围(只要在您致电int
时待处理大于零),您就可以沿着这些行执行某些操作:
markComplete()
答案 1 :(得分:0)
不要更新currentPending
,因为它是可派生的。保留它并使用它:
public long getCurrentPending() {
return currentPending.get() - completed.get();
}
添加项目时,您可以随时增加currentPending
而不会破坏任何内容。
答案 2 :(得分:0)
并发对象仅用于使一个值线程安全。如果您希望对多个值具有可靠性,则必须使用锁定(如同步中)