同步关键字



我正在开发一个下载图像并将其保存到sdcard的应用程序。与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);
    }
}

这个课程是一个单身人士,因为我阅读将带有多个线程的磁盘写入会阻碍性能。但是,我确实有多个线程下载数据并将其发送到此类。所以我的问题是,本班的所有方法都应该对它们进行同步的关键工作?

为什么不使用writerThreadPool = Executors.newFixedThreadPool(numThreads)创建图像作者的线程池。这样,您可以调用writerThreadPool.submit(),允许将图像排队以编写为线程。线程池将为您处理IO节流功能,因为它只会允许您创建的给定数量的线程。通过使用Executors.newFixedThreadPool,您可以通过更改numThreads轻松播放线程数来允许或多或少的线程以获得所需的性能。

我不知道该假设是否有效(您应该在SD卡上油门I/O),但是即使是,您也可能想制作此配置,同步关键字不会让您。

诸如计数信号量(以及设置允许数量的配置文件)之类的东西?

最新更新