当我希望我的线程共享一个 ArrayList 时,我应该在哪里实例化 ArrayList,以及如何从 main 方法访问它?
When I want my threads to share an ArrayList, where do I instantiate the ArrayList, and how do I access it from the main method?
我希望能够在我的 main 方法中创建多个线程,让每个线程 运行 代码通过在每个线程上调用 运行() 来生成某些对象,然后让每个线程完成后将这些对象添加到共享的 ArrayList。所以现在我有我的 class Threader implements Runnable{
和我的 public class Processor
,其中我的 main
方法是唯一的方法。我的 main
方法创建 i
个线程,同时传入我想要的相关参数,然后对每个线程调用 start()
。在 Threader
class 的 start()
方法中,我 运行 通过我编写的一些代码,以创建自定义 Document
对象结束。当线程成功创建该对象时,我希望它能够将它添加到 <documents>
.
类型的 documents
ArrayList 中
所以我假设我想让 ArrayList 同步,但是我应该在哪里实例化它以便我也可以从我的 main
方法访问它?
在您的 Threader 中将列表设为静态字段 class 或在 main 中实例化它并将其传递给每个线程。无论哪种方式,您可能都想考虑使用同步集合,或者您必须为添加、获取等实现自己的同步方法...
在您的 main
方法中创建一个同步的 List
然后您可以将它传递给由 main
方法创建的线程。使用像 List
这样的接口而不是像 ArrayList
这样的具体 class 作为方法中的参数可以帮助您将 Threader
解耦为具体的 class。
在main
方法中,可以创建一个ArrayList
,然后使用Collections.synchronuzedList
将其转换为同步的List
。
我希望能够在我的 main 方法中创建多个线程,让每个线程 运行 代码通过在每个线程上调用 运行() 来生成某些对象,然后让每个线程完成后将这些对象添加到共享的 ArrayList。所以现在我有我的 class Threader implements Runnable{
和我的 public class Processor
,其中我的 main
方法是唯一的方法。我的 main
方法创建 i
个线程,同时传入我想要的相关参数,然后对每个线程调用 start()
。在 Threader
class 的 start()
方法中,我 运行 通过我编写的一些代码,以创建自定义 Document
对象结束。当线程成功创建该对象时,我希望它能够将它添加到 <documents>
.
documents
ArrayList 中
所以我假设我想让 ArrayList 同步,但是我应该在哪里实例化它以便我也可以从我的 main
方法访问它?
在您的 Threader 中将列表设为静态字段 class 或在 main 中实例化它并将其传递给每个线程。无论哪种方式,您可能都想考虑使用同步集合,或者您必须为添加、获取等实现自己的同步方法...
在您的 main
方法中创建一个同步的 List
然后您可以将它传递给由 main
方法创建的线程。使用像 List
这样的接口而不是像 ArrayList
这样的具体 class 作为方法中的参数可以帮助您将 Threader
解耦为具体的 class。
在main
方法中,可以创建一个ArrayList
,然后使用Collections.synchronuzedList
将其转换为同步的List
。