model.SKU = Double.parseDouble(map.get("SKU"));怎样才能变得线程安全
时间: 2024-03-23 11:39:23 浏览: 20
要使该代码线程安全,可以采取以下措施:
1.使用线程安全的Map实现,比如ConcurrentHashMap,可以避免多线程访问时的并发问题。
2.将该代码块放入同步代码块中,锁住model对象,保证同一时间只有一个线程能够修改model.SKU属性。例如:
```
synchronized(model) {
model.SKU = Double.parseDouble(map.get("SKU"));
}
```
3.使用AtomicDouble类型来存储SKU属性,它是线程安全的浮点数类型。例如:
```
AtomicDouble atomicSKU = new AtomicDouble(Double.parseDouble(map.get("SKU")));
model.setSKU(atomicSKU);
```
需要注意的是,以上措施只是部分解决了线程安全问题,具体还要根据应用场景和具体情况进行分析和处理。
相关问题
model.SKU = Double.parseDouble(map.get("SKU"));是否安全
这行代码本身并没有明显的安全问题。它将字符串类型的"SKU"键对应的值转换为Double类型,并赋值给model对象的SKU属性。但是,如果map中不存在"SKU"键,或者"SKU"对应的值不是数字类型的字符串,就会抛出NumberFormatException异常。因此,在使用这行代码之前,建议先检查map中是否存在"SKU"键,并且对应的值是否是数字类型的字符串,以避免异常的发生。此外,还需要考虑是否需要对SKU属性进行范围限制或格式校验等安全性方面的处理。
private void init() { this.list = new ArrayList<>(); //this.filePath = Environment.getExternalStorageDirectory().getPath() + "/sdcard/xiaoshipin/import/inventory.xlsx"; File dir = new File(Environment.getExternalStorageDirectory(), "/sdcard/xiaoshipin/import/"); if (!dir.exists()) { dir.mkdirs(); } String filePath = dir.getPath() + "/inventory.xlsx"; this.excelList = ExcelUtils.read(filePath); if (excelList != null) { for (Map<String, String> map : excelList) { ExcelImportViewModel model = new ExcelImportViewModel(); model.SKU =Double.parseDouble(map.get("SKU")); model.name = map.get("商品"); model.barCode = map.get("條碼"); model.real_inventory = Double.parseDouble(map.get("預期應有庫存")); model.difference = map.get("差值"); model.CostDifference = map.get("成本差值"); list.add(model); } } iv.inventoryList = list; }this.excelList = ExcelUtils.read(filePath);为null
根据你提供的代码,可以看出读取 Excel 文件的操作是通过调用 `ExcelUtils.read(filePath)` 方法实现的。如果该方法返回 `null`,那么就说明读取 Excel 文件失败了。
你可以尝试使用日志打印功能,输出 `filePath` 的值,然后检查该路径下是否存在名为 `inventory.xlsx` 的文件。如果文件不存在,那么读取操作肯定会失败,返回 `null`。
另外,你也可以检查一下 Excel 文件的格式是否正确。如果 Excel 文件格式不正确,读取操作同样会失败,返回 `null`。
最后,如果你仍然无法解决问题,请提供更多的错误信息或者调试信息,以便更好地帮助你解决问题。