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

时间:2018-12-10 03:04:53

标签: java multithreading arraylist synchronized

我希望能够在我的main方法中创建多个线程,让每个线程运行代码通过在每个线程上调用run()来生成某些对象,然后让每个线程在完成时将这些对象添加到共享的ArrayList中。因此,现在我有了class Threader implements Runnable{public class Processor,其中只有main方法是我的方法。我的main方法在传递我想要的相关参数的同时创建了i个线程,然后在每个线程上调用start()。在我的start()类的Threader方法中,我遍历了我编写的一些代码,最后创建了一个自定义Document对象。当线程成功创建该对象后,我希望它能够将其添加到类型为documents的{​​{1}} ArrayList中。

所以我假设我想使ArrayList同步,但是我应该在哪里实例化它,以便也可以从我的<documents>方法访问它?

2 个答案:

答案 0 :(得分:1)

使Threader类中的List成为静态字段,或在main中实例化它,并将其传递给每个线程。您可能想考虑使用同步集合的任何一种方法,或者必须实现自己的同步方法以进行添加,获取,提取...

答案 1 :(得分:1)

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

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