java atomicfloat_java – 多线程通信:AtomicInteger使用Atomic Variables有多好?为什么没有AtomicFloat?...

你基本上有一个读者作家的问题,有两个读者和(目前)只有一个作家.如果你只想在线程之间传递简单类型,那么AtomicInteger或类似实现的AtomicFloat就可以了.

但是,一个更容易使用的解决方案,可以让您使用更复杂的数据类型,ReadWriteLock保护您读取或写入对象数据的代码:

例如.:

private ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); //the reentrant impl

....

public void readMethod() {

readWriteLock.readLock().lock();

try {

//code that simply _reads_ your object

} finally {

readWriteLock.readLock().unlock();

}

}

public void writeMethod() {

readWriteLock.writeLock().lock();

try {

//... code that modifies your shared object / objects

} finally {

readWriteLock.writeLock().unlock();

}

}

这将仅启用“仅一个编写器”或“多个读取器”方案来访问您的共享对象.

这将使您能够使用如下所示的复杂类型:

public class SensorRead {

public java.util.Date dateTimeForSample;

public float value;

}

使用此数据类型时,您应该关心是否安全且原子地设置和修改了两个字段. AtomicXXX类型对象不再有用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值