线程与创建它的对象进行通信的首选方式是什么?

时间:2019-06-07 18:04:55

标签: java multithreading

我有一个创建10个线程的对象。 该对象具有一个用户集合。 这些线程中的每一个都可以检查是否存在特定用户,或者可以从集合中添加/删除用户。

我想知道如何实现这种沟通。

是否应该通过构造函数或线程内部的方法将用户集合传递到每个线程中?

我应该将主对象传递到每个线程中,以便它们可以访问对象的属性吗?还是在主对象内部具有用于处理线程将调用的用户集合的特定方法?

我不确定在这种情况下的最佳做法是什么。

2 个答案:

答案 0 :(得分:1)

据我所知,您需要一个线程安全的结构,以便任何线程都可以添加和删除用户。我建议您使用java.util.concurrent.CopyOnWriteArrayList,其中应包含用户。应该是这样的。

CopyOnWriteArrayList<User> copwl = new CopyOnWriteArrayList<>();

这里的用户是一个对象。

如果需要,可以将上面的列表传递给线程。

答案 1 :(得分:0)

您将希望将User对象保留在线程安全的数据结构中,这将确保您的线程在添加/删除用户对象期间不会遇到任何竞争条件。

您应该看一下Java提供的Concurrent Collections。您还可以使用通过Collection.synchronizedCollection参见here

获得的标准Java集合的同步版本。

可以将该数据结构传递到每个线程的构造函数中,这样您就可以访问每个线程中的集合。