【发布时间】:2011-05-11 10:19:24
【问题描述】:
我是 Java 和 Android 的新手,所以请耐心等待。
我在主 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。
感谢您的宝贵时间。
【问题讨论】:
标签: java android multithreading thread-safety synchronized