Java(Android)线程,访问相同的列表

时间:2011-05-11 10:19:24

标签: java android multithreading thread-safety synchronized

我是Java和Android的新手,所以请耐心等待。

我有一个字符串arrayList,我在主UI上填充。

我有另一个线程,它通过套接字逐个发送arrayList的字符串,并在发送每个线程后从列表中删除它。

所以基本上它是一个FIFO,有两个不同的线程访问同一个arrayList。

如何在同一列表中进行读写,线程安全?因为我读了必须这样做,从而防止了将来的错误。

我的第一个想法是创建一个访问arrayList的同步方法。

这是我为两个线程访问ArrayList而创建的方法。

public synchronized String accessArrayList(boolean add, boolean get, String utt)
{
    if(add){            
        mStrings.add(utt);
        return null;
    }
    else if(get){
        return mStrings.get(0);

    }
    else{
        mStringsUttComm.remove(0);
        return null;
    }


}

主线程只是将字符串添加到此列表中。

第二个线程执行此操作:

Runnable runner = new Runnable() {
      public void run() {
          while(!mString.isEmpty()){
                              //socket sends string               
              sc.actionPerformed(accessArrayList(false, true, null));
                              //erase from list
              accessArrayList(false, false, null);
          }

      }
};

这是对的吗?因为我是eclipse的新手,如果另一个线程正在使用它,我找不到确认一个线程不调用accessArrayList的方法。

感谢您的时间。