Java 当我希望我的线程共享ArrayList时,我在哪里实例化ArrayList,以及如何从main方法访问它?
我希望能够在main方法中创建多个线程,让每个线程运行代码,通过对每个线程调用run()来生成某些对象,然后让每个线程在完成后将这些对象添加到共享的ArrayList中。所以现在我有了我的Java 当我希望我的线程共享ArrayList时,我在哪里实例化ArrayList,以及如何从main方法访问它?,java,multithreading,arraylist,synchronized,Java,Multithreading,Arraylist,Synchronized,我希望能够在main方法中创建多个线程,让每个线程运行代码,通过对每个线程调用run()来生成某些对象,然后让每个线程在完成后将这些对象添加到共享的ArrayList中。所以现在我有了我的类线程器实现了Runnable{和公共类处理器,它有我的main方法作为唯一的方法。我的main方法在传递我想要的相关参数时创建I线程,然后调用start()。在我的Threader类中的start()方法中,我运行了我编写的一些代码,最后创建了一个自定义文档对象。当线程成功创建该对象时,我希望它能够将其添加到
类线程器实现了Runnable{
和公共类处理器
,它有我的main
方法作为唯一的方法。我的main
方法在传递我想要的相关参数时创建I
线程,然后调用start()
。在我的Threader
类中的start()
方法中,我运行了我编写的一些代码,最后创建了一个自定义文档
对象。当线程成功创建该对象时,我希望它能够将其添加到类型的文档
数组列表中
因此,我假设我想让ARAYLIST同步,但是我在哪里可以实例化它,以便我也可以从我的代码>主< <代码>方法> 使列表在你的线程类中成为一个静态字段,或者将它实例化到主线程中,并将它传递给每个线程。为了实现你自己的同步方法,添加、获取、ECT……/P> < P>使列表在你的线程类中成为静态字段,或者在主线程中实例化它,并将其传递给每个线程。无论哪种方式,你可能都想考虑使用同步集合,或者你必须实现自己的同步方法来添加、获取、ECT…< /P> < P>创建同步。在main
方法中ronizedList
,然后可以将其传递给由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()
解决此问题。