当前位置: 首页 > 面试题库 >

并发线程同时添加到ArrayList-会发生什么?

史逸春
2023-03-14
问题内容

我们有多个线程调用add(obj)ArrayList

我的理论是,当add由两个线程同时调用时,实际上仅将要添加的两个对象之一添加到ArrayList。这看似合理吗?

如果是这样,您如何解决呢?使用类似Vector吗?


问题答案:

对于ArrayList上的两个线程同时调用add时发生的情况,没有任何保证的行为。但是,根据我的经验,两个对象的添加都很好。与列表相关的大多数线程安全问题在添加/删除时都会处理迭代。尽管如此,我强烈建议不要将Vanilla
ArrayList与多个线程和并发访问一起使用。

向量曾经是并发列表的标准,但是现在标准是使用集合同步列表。

如果您要花任何时间在Java中使用线程,我也强烈建议Goetz等人在实践中使用Java Concurrency。该书更详细地介绍了此问题。



 类似资料:
  • 问题内容: 我知道从线程调用是一个坏主意。但是,如果线程使用创建新进程,将会发生什么? 新进程将是创建线程的主线程的子进程。我认为。 如果其父级先完成,则新进程将附加到init进程中。它的父级是主线程,而不是创建它的线程。 如果我错了,请纠正我。 问题答案: 新进程将是创建线程的主线程的子进程。我认为。 创建一个新的过程。一个进程的父进程是另一个进程,而不是线程。因此,新流程的父级是旧流程。 请注

  • 问题内容: 问题发生在 包含该行的代码位于 所有这一切都在里面,这里是一个 当我触摸时,它可能会激活,这将创建另一个具有不同属性的属性,这些属性会从屏幕上掉下来并在不到一秒钟的时间内销毁自己。这是我创建粒子效果的方式。我们可以将其称为“粒子” ,就像构造函数中的参数一样。 一切正常,直到我添加另一个main为止。现在,我同时在屏幕上有两个,如果我触摸最新的,它可以正常工作并启动粒子。 但是,如果我

  • 问题内容: 线程启动后,如果该线程的引用设置为,那么该线程将如何处理?会停止吗?它有资格获得GC吗? 像这样: 问题答案: 实时线程将继续运行,即使其引用设置为null。 就像任何其他对象一样,当没有任何引用时,它就有资格使用GC。棘手的一点是,即使您的程序未保留一个 正在运行的线程 在ThreadGroup中的引用,因此 也永远不会 对 正在运行的线程进行GC。

  • 根据我对的理解,默认容量为10,当它超过10时,它将创建一个具有新容量的新对象,依此类推。 所以出于好奇,我键入以下程序来检查对象的: 根据上述场景,当我没有为设置初始容量时,默认值为10。因此,在添加第11个元素时,它将创建一个新对象,并增加的容量。 当我打印对象的hashcode时,它每次都会给出一个新的。 以下是o/p: 根据默认容量的概念,直到第10个元素,它应该打印相同的,因为在那之前不

  • 来自文档:http://docs.python.org/2/library/thread 让我们在这里只讨论非守护进程线程。因为第一个引号没有特别提到非守护进程线程,所以我假设,如果主线程退出,即使是非守护进程线程也应该被杀死。然而,第二句引文却表明了另一种情况。事实上,当主线程退出时,非守护进程线程确实不会被杀死。那么,这里的第一个引用有什么意义呢?

  • 问题内容: 我正在使用urllib2进行数据抓取调用,但是每个调用大约需要1秒钟才能完成。我正在尝试测试是否可以将URL调用循环多线程化为具有不同偏移量的线程。 我现在使用update_items()方法执行此操作,其中第一个和第二个参数是循环的偏移量和限制: 像代码一样,我试图对join()进行注释,以防止线程等待,但是看来我对这个库的想法是错误的。我将print()函数插入了update_it