Я новичок в Java и Android, так что терпите меня.
У меня есть один массив строк, который я заполняю в основном пользовательском интерфейсе.
У меня есть другой поток, который отправляет одну за другой строки массиваList через сокет, и после отправки каждой он стирает ее из списка.
Так что в основном это 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, если его использует другой.
Спасибо за уделенное время.