Blankj / Blankj/AndroidUtilCode

CacheDiskStaticUtils多线程存储的时候有问题

Đang mở
#1,479 0 bình luận 0 reaction 1 người được giao Được @Blankj nhận Xem trên GitHub
bug
Ngôn ngữ chính
Java
Star
33.6k
Fork
10.6k
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

多个线程调用CacheDiskStaticUtils.put()存储数据的时候,文件写入有问题。排查发现UtilsBridge.writeFileFromBytes(file, value)是非线程安全的,大佬麻烦看一下

- AndroidUtilCode 的版本:utilcode:1.30.0
- 出现 Bug 的设备型号:MeiZu M6Note
- 设备的 Android 版本:API 25

## 问题代码
```
CacheDiskUtils.class
private void realPutBytes(final String key, byte[] value, int saveTime) {
if (value == null) return;
DiskCacheManager diskCacheManager = getDiskCacheManager();
if (diskCacheManager == null) return;
if (saveTime >= 0) value = DiskCacheHelper.newByteArrayWithTime(saveTime, value);
File file = diskCacheManager.getFileBeforePut(key);
UtilsBridge.writeFileFromBytes(file, value);
diskCacheManager.updateModify(file);
diskCacheManager.put(file);
}
```

## 测试代码
```
private int num = 0;
private Runnable mRunnable = () -> {
num++;
CacheDiskStaticUtils.put("save_test", num + "");
};

private void testSave() {
try {
Thread thread1 = new Thread(mRunnable);
Thread thread2 = new Thread(mRunnable);
Thread thread3 = new Thread(mRunnable);
Thread thread4 = new Thread(mRunnable);
Thread thread5 = new Thread(mRunnable);
Thread thread6 = new Thread(mRunnable);

thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();
thread6.start();

thread1.join();
thread2.join();
thread3.join();
thread4.join();
thread5.join();
thread6.join();
} catch (Exception e) {
e.printStackTrace();
}
LogUtils.e("value:" + CacheDiskStaticUtils.getString("save_test") + " num:" + num);
}
```

## 截图
[
![jt1](https://user-images.githubusercontent.com/38761029/113822080-916f6600-97af-11eb-9b3a-2b221f736d37.png)
](url)

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.