【发布时间】:2023-03-29 05:36:02
【问题描述】:
我需要一个线程安全且可以有多个值的 Map。我确实使用MultiMap 写了一个
private MultiMap<String, String> uploadIdETagMap = new MultiValueMap<String, String>();
//Function to get tag value and add to map to that uploadId key
public void uploadPartForMultiPartUpload() {
try {
UploadPartRequest partRequest = new UploadPartRequest();
partRequest = partRequest.withBucketName(bucketName).withInputStream(inputStream).withKey(fileName)
.withPartNumber(partNumber).withUploadId(uploadId).withPartSize(sizeOfData)
.withLastPart(isLastPart);
UploadPartResult result = s3Client.uploadPart(partRequest);
uploadIdETagMap.put(uploadId, result.getPartETag());
} catch (Exception e) {
log.error("Error uploading part: {} in multi part upload.", partNumber, e);
}
}
List<String> tagList = (List<String>) uploadIdETagMap.get(uploadId);
所以每次我都会为特定的 uplaodId 键获得新的标签值,最后我需要所有这些标签,并且同时会有其他上传处理。
在上面的代码中,每次都会添加tag 作为特定uploadId 键的MultiMap 的值。
上述代码有效,但MultiMap 和MultiValueMap 均已弃用且不是线程安全的。
所以任何建议我如何才能通过最新版本和线程安全来实现这一点。
【问题讨论】:
标签: java collections hashmap thread-safety