Когда я хочу, чтобы мои потоки совместно использовали ArrayList, где я могу создать экземпляр ArrayList и как получить к нему доступ из основного метода? - PullRequest
0 голосов
/ 10 декабря 2018

Я хочу иметь возможность создавать несколько потоков в моем основном методе, чтобы каждый поток выполнял код для генерации определенных объектов с помощью вызова run () для каждого, а затем каждый поток по завершении добавляет эти объекты в общий ArrayList.Итак, сейчас у меня есть class Threader implements Runnable{ и мой public class Processor, в котором мой main метод является единственным методом.Мой метод main создает потоки i, передавая соответствующие аргументы, которые я хочу, и затем вызывает start() для каждого из них.В методе start() в моем классе Threader я выполняю некоторый написанный мной код, заканчивающийся созданием пользовательского объекта Document.Когда поток успешно создал этот объект, я хочу, чтобы он мог добавить его в documents ArrayList типа <documents>.

Поэтому я предполагаю, что хочу синхронизировать ArrayList, но где быЯ создаю его экземпляр, чтобы я мог получить к нему доступ из моего main метода?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Создайте синхронизированный List в своем методе main, после чего вы можете передать его потокам, созданным методом main.Использование интерфейса типа List вместо конкретного класса, например ArrayList, в качестве параметра в вашем методе может помочь вам отделить Threader от конкретного класса.

В методе main выможно создать ArrayList, а затем использовать Collections.synchronuzedList для преобразования его в синхронизированный List.

0 голосов
/ 10 декабря 2018

Сделайте List статическим полем в вашем классе Threader или создайте его экземпляр в main и передайте его каждому потоку.В любом случае вы, вероятно, захотите рассмотреть вопрос об использовании синхронизированной коллекции, или вам придется реализовать свои собственные синхронные методы для добавления, получения, т. Д ...

...