java - 同步关键词

标签 java android multithreading

我正在开发一个下载图像并将它们保存到 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/

相关文章:

java - Scala-Scalding 中求和列表的替代品是什么

java - 如何从 Android 中的 JSON 解析中深入提取对象/数组

android - 在检测单元测试中模拟方法

android - 有没有办法将 "hidden"数据添加到 GCM(android 推送)通知?

android - runOnUiThread和滞后

c# - 信号量:了解初始和最大请求​​数

java - Facebook Restfb 使用 jsonObject 停止获取点赞数

java - JPA:字节数组字段的 TypedQuery

android - 查询一个文件的信息android

multithreading - 在多线程环境中锁定什么和不锁定什么(信号量和共享内存)