Java 8添加了一个称为的随机数生成器SplittableRandom,该生成器似乎旨在用于流。但是,尚不清楚它比更好或更有用ThreadLocalRandom。通过阅读文档,似乎算法已更改为具有更好的统计属性。也就是说,为什么不调用它BetterThreadLocalRandom并删除split方法呢?为什么会有人打电话split()?
有可能阻止Phantom读取,或以其他方式锁定Postgres事务中丢失的行吗?例如,请考虑以下命令序列:
在连接1上:
CREATE TABLE weather ( city varchar(80) PRIMARY KEY );
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO weather VALUES ('a');
Run Code Online (Sandbox Code Playgroud)
同时,在连接2上:
BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT * FROM weather WHERE city = 'a' FOR SHARE;
INSERT INTO weather VALUES ('b');
Run Code Online (Sandbox Code Playgroud)
并回到连接1:
COMMIT;
Run Code Online (Sandbox Code Playgroud)
再次回到连接2:
COMMIT;
SELECT * FROM weather;
-- Shows both rows
Run Code Online (Sandbox Code Playgroud)
连接2上的事务似乎不可能成功,因为创建行'b'的前提条件取决于行'a'的缺失.如何防止第二个事务成功?