Java 当我希望我的线程共享ArrayList时,我在哪里实例化ArrayList,以及如何从main方法访问它?

Java 当我希望我的线程共享ArrayList时,我在哪里实例化ArrayList,以及如何从main方法访问它?,java,multithreading,arraylist,synchronized,Java,Multithreading,Arraylist,Synchronized,我希望能够在main方法中创建多个线程,让每个线程运行代码,通过对每个线程调用run()来生成某些对象,然后让每个线程在完成后将这些对象添加到共享的ArrayList中。所以现在我有了我的类线程器实现了Runnable{和公共类处理器,它有我的main方法作为唯一的方法。我的main方法在传递我想要的相关参数时创建I线程,然后调用start()。在我的Threader类中的start()方法中,我运行了我编写的一些代码,最后创建了一个自定义文档对象。当线程成功创建该对象时,我希望它能够将其添加到

我希望能够在main方法中创建多个线程,让每个线程运行代码,通过对每个线程调用run()来生成某些对象,然后让每个线程在完成后将这些对象添加到共享的ArrayList中。所以现在我有了我的
类线程器实现了Runnable{
公共类处理器
,它有我的
main
方法作为唯一的方法。我的
main
方法在传递我想要的相关参数时创建
I
线程,然后调用
start()
。在我的
Threader
类中的
start()
方法中,我运行了我编写的一些代码,最后创建了一个自定义
文档
对象。当线程成功创建该对象时,我希望它能够将其添加到
类型的
文档
数组列表中


因此,我假设我想让ARAYLIST同步,但是我在哪里可以实例化它,以便我也可以从我的代码>主< <代码>方法>

使列表在你的线程类中成为一个静态字段,或者将它实例化到主线程中,并将它传递给每个线程。为了实现你自己的同步方法,添加、获取、ECT……/P> < P>使列表在你的线程类中成为静态字段,或者在主线程中实例化它,并将其传递给每个线程。无论哪种方式,你可能都想考虑使用同步集合,或者你必须实现自己的同步方法来添加、获取、ECT…< /P> < P>创建同步。在
main
方法中ronized
List
,然后可以将其传递给由
main
方法创建的线程。使用
List
之类的接口,而不是
ArrayList
之类的具体类作为方法中的参数,可以帮助您将
Threader
解耦到具体类


main
方法中,您可以创建一个
ArrayList
,然后使用
Collections.synchronizedList
将其转换为一个同步的
List

main
方法中创建一个同步的
List
,然后您可以将其传递给
main
方法创建的线程方法中的参数是像
List
这样的接口,而不是像
ArrayList
这样的具体类,可以帮助您将
Threader
解耦到具体类


main
方法中,您可以创建一个
ArrayList
,然后使用
Collections.SynchronizedList
将其转换为一个同步的
List

全局变量?将其存储在一个
Singleton
中?尽量不要启动虚拟机。在“main”中创建
ArrayList
方法,将它的引用传递给您创建的每个线程。“我假设我希望使ArrayList同步”-没错,
ArrayList
不是线程安全的。您可以使用类似的方法,使您可以创建一个
列表
线程安全(包装在线程安全代理中),但是您必须使用
List
而不是
ArrayList
作为基本需求(请记住
ArrayList
实现
List
)@MadProgrammer,因此,如果我的同步列表被称为
documents
,每次我创建一个新线程时,我都会将其写为
thread1=新线程(documents)
,则我从任何线程添加到
文档中的任何内容都将添加到main方法中的唯一列表中?@user2709168理论上是的。只要它们都编写相同的referenceGlobal变量?将其存储在
单例中
?尽量不要启动虚拟机。在“main”中创建
数组列表
方法,将它的引用传递给您创建的每个线程。“我假设我希望使ArrayList同步”-没错,
ArrayList
不是线程安全的。您可以使用类似的方法,使您可以创建一个
列表
线程安全(包装在线程安全代理中),但是您必须使用
List
而不是
ArrayList
作为基本需求(请记住
ArrayList
实现
List
)@MadProgrammer,因此,如果我的同步列表被称为
documents
,每次我创建一个新线程时,我都会将其写为
thread1=新线程(documents)
,那么我从任何线程添加到
文档中的任何内容都将添加到主方法中的唯一列表中?@user2709168理论上是的。只要它们都编写相同的引用,我想补充一点,这样做会给我一个ConcurrentModificationException。我必须在创建每个线程到通过
Thread.sleep()
解决此问题。我想补充一点,就是这样做会给我带来ConcurrentModificationException。我必须在创建每个线程之间添加一个短延迟,才能通过
Thread.sleep()
解决此问题。