使类线程安全

时间:2014-01-10 10:42:15

标签: java android multithreading thread-safety

生成此代码是为了在我的应用中保存事件历史记录,因为我需要提供以下代码:

public class LogDataBase {
    public LogDataBase(Context context) {
        try {
            this.context = context;
            String logPath = context.getFilesDir() + logStoragePath;
            file = new File(logPath);
            if (!file.exists()) {
                file.createNewFile();
            }
        } catch (Exception e) {
        Errors += ("\n" + e.getMessage());
        }
    } 
    public void addItem(String log) {
        try {
            dbWriter = new FileWriter(file, true);
            //appand String log to file
            ....
    }
   public ArrayList<String> getArrayList() { 
     //get all Logs as arraylist
    }
}   

主要问题是如何开发线程安全的应用程序?由于应用程序可能使用服务和多处理,因此多线程应确保代码和类是安全的。

请为这个重要主题提供一些全面的解释(不仅要说Synchronization , Lock,...
希望对别人有用 提前谢谢。

1 个答案:

答案 0 :(得分:1)

同步是保证代码部分是线程安全的最简单方法之一。但是由于它造成的阻塞,它会减慢你的应用程序。所以我建议的最佳方式是使用生产者消费者实施。因此,步骤如下

  • 生产者
  • 添加要登录队列的项目。应该同步添加到队列
  • 然后通知该队列上的所有线程块。
  • 消费者
  • 在数据可用时使用队列的单独线程。读取队列是唯一需要同步的东西。
  • 如果队列中没有要处理的项目,请等到有人通知

通过这种方式,您可以最大限度地减少阻塞并保证以线程安全的方式处理某些任务。