我的问题是指使用ReentrantLock是否保证字段的可见性与synchronized关键字提供的方面相同.
例如,在下面的类A中,当使用synchronized关键字时,字段sharedData不需要声明为volatile.
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
但是对于使用ReentrantLock的下一个示例,是否必须在该字段上使用volatile关键字?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道无论如何使用volatile关键字只会造成极小的性能损失,但我仍然希望正确编码.
我有几个可序列化的类,编译时没有指定serialVersionUID.我现在需要向这些类添加一些数据成员,但希望保留一些已经序列化的对象.
有没有找到这些序列化对象的serialVersionUID,以便我可以在源代码中指定相同的ID?
我们使用Lambda为通过新闻媒体网站访问的API(通过API网关)供电,接收波动但高负载的流量.我们开始体验限制,因此我们将并发限制提高到2000.但是,我们仍然每天多次经历限制.
奇怪的是,在CloudWatch指标中,当我们受到限制时,并发请求达到600或更低.请参阅此CloudWatch图表作为示例:
有谁之前经历过这个吗?为什么你认为这种情况发生了?我们对于它可以做些什么呢?
更多信息
此外,这里的图像还显示了同一时间段内的总调用次数和平均持续时间.很难知道是什么因果关系(由于节流导致持续时间上升,反之亦然,因为一些lambdas会调用其他lambda).请查看相应的轴,因为刻度差异很大.
只是好奇.我听说过关于新G1GC处理延迟问题的一些事情.我不能/不想使用RTSJ.
提前致谢
java ×3
aws-lambda ×1
concurrency ×1
g1gc ×1
locking ×1
optimization ×1
reentrancy ×1
throttling ×1
volatile ×1