【发布时间】:2019-05-10 22:58:54
【问题描述】:
我希望能够在我的 main 方法中创建多个线程,让每个线程运行代码以通过在每个线程上调用 run() 来生成某些对象,然后让每个线程在完成后将这些对象添加到共享的 ArrayList 中。所以现在我有我的class Threader implements Runnable{ 和我的public class Processor,我的main 方法是唯一的方法。我的main 方法在传入我想要的相关参数时创建i 线程,然后在每个线程上调用start()。在我的Threader 类的start() 方法中,我运行了一些我编写的代码,最后创建了一个自定义Document 对象。当线程成功创建该对象时,我希望它能够将其添加到 <documents> 类型的 documents ArrayList。
所以我假设我想让 ArrayList 同步,但是我应该在哪里实例化它以便我也可以从我的 main 方法访问它?
【问题讨论】:
-
全局变量?
-
将其存储在
Singleton?尽量不要让你的虚拟机着火。 -
在“main”方法中创建
ArrayList,将它的引用传递给您创建的每个线程。 “我假设我想让 ArrayList 同步” - 没错,ArrayList不是线程安全的。您可以使用Collections.synchronuzedList之类的东西,这将允许您使List线程安全(包装在线程安全代理中),但是您必须使用List而不是ArrayList作为您的基本要求(记住ArrayList实现List) -
@MadProgrammer 所以如果我的synchronizedList被称为
documents,每次我创建一个新线程时,我都将它写为Thread thread1 = new Thread(documents),那么我从任何线程添加到documents的任何东西都将是在主方法中添加到我唯一的列表中? -
@user2709168 理论上是的。只要他们都写相同的参考文献
标签: java multithreading arraylist synchronized