2024-09-29 05:30:21
2024-09-29 04:13:57
java中 i++ 或者++i这些都不是线程安全的
在java中解决这个问题可以使用synchronized或者AtomicInteger包装类,当然会增加开销.
JDK API 1.6文档中该类的描述和方法如下:
AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了
Number,允许那些处理基于数字类的工具和实用工具进行统一访问。int addAndGet(int delta)
以原子方式将给定值与当前值相加。boolean compareAndSet(int expect,
int update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。int decrementAndGet()
以原子方式将当前值减 1。double doubleValue()
以 double 形式返回指定的数值。float floatValue()
以 float 形式返回指定的数值。int get()
获取当前值。int getAndAdd(int delta)
以原子方式将给定值与当前值相加。int getAndDecrement()
以原子方式将当前值减 1。int getAndIncrement()
以原子方式将当前值加 1。int getAndSet(int newValue)
以原子方式设置为给定值,并返回旧值。int incrementAndGet()
以原子方式将当前值加 1。int intValue()
以 int 形式返回指定的数值。void lazySet(int newValue)
最后设置为给定值。long longValue()
以 long 形式返回指定的数值。void set(int newValue)
设置为给定值。String toString()
返回当前值的字符串表示形式。boolean weakCompareAndSet(int expect,
int update)
如果当前值 == 预期值,则以原子方式将该设置为给定的更新值。
2024-09-29 00:24:09