Я пытался создать объект списка и передать его сервису-исполнителю, но при этом будет создано несколько копий одного и того же списка, и в конце я вижу только 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]
Мобильная версия