我正在开发一个下载图像并将它们保存到 SD 卡的应用程序。与 sdcard 交互的类如下所示...
public class SDCardImageManagerImp implements SDCardImageManager {
private Context context;
@Inject
public SDCardImageManagerImp(Context context) {
this.context = context;
}
@Override
public void saveToSDCard(String id, Bitmap bitmap) throws FileNotFoundException {
FileOutputStream outputStream = context.openFileOutput(id, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
}
@Override
public Bitmap getImage(String id) throws FileNotFoundException {
return BitmapFactory.decodeStream(context.openFileInput(id));
}
@Override
public void deleteImage(String id) {
context.deleteFile(id);
}
}
这个类是一个单例类,因为我读到多线程磁盘写入会影响性能。但是我确实有多个线程下载数据并将其发送到此类。所以我的问题是这个类中的所有方法都应该对它们进行同步 key 工作吗?
最佳答案
为什么不使用 writerThreadPool = Executors.newFixedThreadPool(numThreads)
创建一个 Image Writers 线程池。这样,您调用 writerThreadPool.submit()
允许图像在线程可用时排队等待写入。线程池将为您处理 io 节流,因为它只会允许您创建的给定数量的线程。通过使用 Executors.newFixedThreadPool
,您可以通过更改 numThreads
轻松调整线程数,以允许更多或更少的线程获得所需的性能。
关于java - 同步关键词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067764/