Java (Android) темы, доступ к тому же списку - PullRequest
0 голосов
/ 11 мая 2011

Я новичок в Java и Android, поэтому терпите меня.

У меня есть один массив списков строк, которые я заполняю в основном интерфейсе.

У меня есть другой поток, который отправляет по очереди строки arrayList через сокет, и после отправки каждого из них он удаляет его из списка.

Так что в основном это FIFO, сдва разных потока обращаются к одному и тому же массиву списков.

Как сделать чтение и запись в одном списке безопасными для потоков?Потому что я прочитал, что должен, что предотвратило будущие ошибки.

Моей первой мыслью было создание синхронизированного метода для доступа к 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);
          }

      }
};

Это правильно?Потому что я новичок в затмении и не могу найти способ подтвердить, что один поток не вызывает accessArrayList, если другой использует его.

Спасибо за ваше время.

1 Ответ

1 голос
/ 11 мая 2011

Посмотрите на векторы и синхронизацию:

Векторы: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html

Синхронизация: http://download.oracle.com/javase/tutorial/essential/concurrency/sync.html

...