Есть ли способ добавить несколько потоков в один и тот же объект списка?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли способ добавить несколько потоков в один и тот же объект списка?

Сообщение Anonymous »

Я создаю приложение, в котором мне нужно создать общий объект ArrayList. Это многопоточная среда, поэтому все потоки должны писать в один и тот же список.

Я пытался создать объект списка и передать его сервису-исполнителю, но при этом будет создано несколько копий одного и того же списка, и в конце я вижу только 1 элемент, добавленный в список.

Примечание. Меня интересует только асинхронная запись в список. Моё чтение синхронизировано.

Код: Выделить всё

public class main{
public static void main(String[] args)
{

ExecutorService taskExec = Executors.newFixedThreadPool(count);
List documents = new ArrayList();

// this seems to be incorrect
taskExec.submit(new test(documents, size));
}
}

class test implements Runnable{

// this class will add JsonDocuments to list object

}
Как я могу заставить все потоки использовать/записывать один и тот же объект списка?

Я новичок в мульти- нить, любая помощь будет оценена по достоинству.

Спасибо.

Обновление: я пробовал использовать Collections.syncronizedList, но у меня он все еще не работает... может быть, я его неправильно использую

Код: Выделить всё

public class App {

public static void main(String[] args) {
// TODO Auto-generated method stub

List documents = Collections.synchronizedList(new ArrayList());

ExecutorService taskExec = Executors.newFixedThreadPool(4);

taskExec.submit(new test(documents, size));

for (JsonDocument json : documents) {
System.out.println(json.toString());
}

while(!taskExec.isTerminated()) {
taskExec.shutdown();
}

}
}

class test implements Runnable {

int size;
List doc;

createJson(List doc, int size){
this.size = size;
this.doc = doc;
}

public void run() {

Hashtable ht = new Hashtable();

for (int i=0; i

Подробнее здесь: [url]https://stackoverflow.com/questions/60349926/is-there-a-way-where-multiple-threads-can-add-to-same-list-object[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»