Java 矢量与阵列列表同步示例

Java 矢量与阵列列表同步示例,java,data-structures,vector,arraylist,synchronization,Java,Data Structures,Vector,Arraylist,Synchronization,向量包含同步方法,而ArrayList不包含。当超过1个线程访问和修改数据时,这些同步方法有助于防止数据损坏 有人能给我详细解释一下吗?向量包含同步方法是什么意思?这些方法是否包含控制多线程访问数据锁定和解锁的内部锁?有人能举一些例子说明使用向量(vs.ArrayList)在哪些方面可以防止数据损坏,并进一步阐明数据结构和同步问题吗 谢谢你的时间和帮助 向量包含同步方法是什么意思 这些方法已标记为已同步 这些方法是否包含控制多线程访问数据锁定和解锁的内部锁 不,尽管关键字在方法上,但锁定的是对象

向量包含同步方法,而ArrayList不包含。当超过1个线程访问和修改数据时,这些同步方法有助于防止数据损坏

有人能给我详细解释一下吗?向量包含同步方法是什么意思?这些方法是否包含控制多线程访问数据锁定和解锁的内部锁?有人能举一些例子说明使用向量(vs.ArrayList)在哪些方面可以防止数据损坏,并进一步阐明数据结构和同步问题吗

谢谢你的时间和帮助

向量包含同步方法是什么意思

这些方法已标记为
已同步

这些方法是否包含控制多线程访问数据锁定和解锁的内部锁

不,尽管关键字在方法上,但锁定的是对象,而不是方法。无法锁定这样的方法

有人能举一些例子说明使用向量(vs.ArrayList)在哪些方面可以防止数据损坏,并进一步阐明数据结构和同步问题吗

有很多例子。最简单的方法是增加一个数字。假设您有两个线程在不同步的情况下递增一个数字(例如集合的大小)

Thread1: read size e.g. 0
Thread1: increment size
Thread1: write size e.g. 1
Thread2: read size e.g. 1
Thread2: increment size
Thread2: write size e.g. 2
但是,由于线程可以按任何顺序执行操作(因为这是线程的全部要点),因此您也可以

Thread1: read size e.g. 0
Thread2: read size e.g. 0
Thread1: increment size
Thread2: increment size
Thread1: write size e.g. 1
Thread2: write size e.g. 1

因此,即使两个线程增加了计数器,这也是不正确的,因为它们的操作不协调。这就是同步为您所做的。

我建议您阅读oracle java并发教程,非常有用!一些来源不鼓励使用Vector,而是提倡使用“java.util.concurrent.*”中的实现。或者在回答第二个问题时使用
Collections.synchronizedXXX
,当您说对象已锁定时,这是否意味着该方法包含这些锁定?另外,在您给出的示例中,read、increment和write方法是否包含synchronized关键字?@陌生人请参见这里的示例:正如Peter所写,该方法用synchronized关键字标记。方法本身不包含任何锁定。Fildor,帮帮我。根据Peter的例子,他是说read、increment和write方法在其方法定义中包含“synchronized”关键字吗?