vector 包含同步方法,而 ArrayList 不包含。当超过 1 个线程访问和修改数据时,这些同步方法有助于防止数据损坏。
有人可以为我更详细地解释一下吗? Vector 包含同步方法是什么意思?这些方法是否包含控制多线程访问数据的锁定和解锁的内部锁?有人可以提供一些示例,说明使用 vector (相对于 ArrayList)可以防止数据损坏,并进一步阐明该问题或数据结构和同步问题吗?
感谢您的时间和帮助。
最佳答案
What does it mean that Vectors contain synchronized methods?
这些方法已被标记为已同步
。
Do the methods contain internal locks that control the locking and unlocking of the data for multiple thread access?
不,尽管关键字位于方法上,但被锁定的是对象,而不是方法。没有办法锁定这样的方法。
Can someone provide some examples of where using a vector (vs. ArrayList) could prevent data corruption and shed some more light on the issue or Data Structures and synchronization issues?
有很多例子。最简单的是增加一个数字。假设您有两个线程递增一个数字(例如集合的大小),无需同步即可。
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
因此,即使两个线程递增了计数器,它也是不正确的,因为它们的操作不协调。这就是同步为您所做的事情。
关于java - Vector 与 ArrayList 同步的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629449/