跳到主要内容

简述Java 中的同步集合与并发集合有什么区别 ?

参考答案:

Java中的同步集合和并发集合都旨在提供线程安全的集合,但它们在实现方式、性能和可扩展性等方面存在显著的差异。

  1. 实现方式:同步集合通过在整个集合上加锁来实现线程安全,这意味着在任何时候只有一个线程能够访问集合。而并发集合则使用更先进和成熟的技术,如锁剥离(lock stripping)和分段锁(segmented locking),来提供更细粒度的锁定。例如,ConcurrentHashMap会将整个Map划分为几个片段,只对相关的几个片段进行加锁,同时允许多线程访问其他未加锁的片段。CopyOnWriteArrayList则通过在写操作时复制整个列表来实现线程安全,而读操作则可以在不加锁的情况下进行。
  2. 性能:由于同步集合在整个集合上加锁,因此在多线程环境下可能会导致严重的性能问题,因为线程之间会频繁地争用锁。而并发集合则通过更细粒度的锁定来减少锁争用,从而提高了性能。
  3. 可扩展性:同步集合在面临高并发压力时,由于锁争用和阻塞,可能会导致系统扩展性受限。而并发集合则由于其细粒度的锁定和更高效的并发控制机制,具有更高的可扩展性。

总的来说,虽然同步集合和并发集合都提供了线程安全的集合,但并发集合在性能、可扩展性和实现方式上更具优势。因此,在需要处理高并发和大规模数据的情况下,通常推荐使用并发集合。