作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我进行了一次编码练习,其中我必须创建以下三个服务:
public class TransactionMemory {
private List<Transaction> transactions = new CopyOnWriteArrayList<>();
public void newTransaction(Transaction transaction) {
transactions.add(transaction);
}
public List<Transaction> trxsInLast60Seconds() {
List<Transaction> filteredTransactions = transactions.stream()
.filter(p -> Instant.parse(p.getTimestamp()).isAfter(DateHelperUtils.getLast60SecondsByNow()))
.collect(Collectors.toList());
removeOldTransactions(filteredTransactions);
return filteredTransactions;
}
private void removeOldTransactions(List<Transaction> filteredTransactions){
transactions.retainAll(filteredTransactions);
}
public void deleteTransactions() {
transactions.clear();
}
}
最佳答案
CopyOnWriteArrayList
类确实是线程安全的,但是它太昂贵了,因为
all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underlying array
ArrayList
的解决方案:
public class TransactionMemory {
private final List<Transaction> transactions = new ArrayList<>();
public synchronized void newTransaction(Transaction transaction) {
transactions.add(transaction);
}
public synchronized List<Transaction> trxsInLast60Seconds() {
List<Transaction> filteredTransactions = transactions.stream()
.filter(p -> Instant.parse(p.getTimestamp()).isAfter(DateHelperUtils.getLast60SecondsByNow()))
.collect(Collectors.toList());
removeOldTransactions(filteredTransactions);
return filteredTransactions;
}
private void removeOldTransactions(List<Transaction> filteredTransactions) {
transactions.retainAll(filteredTransactions);
}
public synchronized void deleteTransactions() {
transactions.clear();
}
}
关于java - 所有CRUD操作的线程安全列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172851/
我是一名优秀的程序员,十分优秀!