我们可以使用 'collections.synchronizedCollection(Collection c)' 或 'collections.synchronizedMap(Map c)' 来同步集合,我们也可以使用 Java 并发 API,如 ConcurrentHashMap 或 ArrayQueue 或 BlockingQueue。
这两种获取同步集合的方式之间的同步级别是否有任何差异,或者它们几乎相同?
谁能解释一下?
我们可以使用 'collections.synchronizedCollection(Collection c)' 或 'collections.synchronizedMap(Map c)' 来同步集合,我们也可以使用 Java 并发 API,如 ConcurrentHashMap 或 ArrayQueue 或 BlockingQueue。
这两种获取同步集合的方式之间的同步级别是否有任何差异,或者它们几乎相同?
谁能解释一下?
是:大规模并行处理期间的速度。
这可以用一个非常简单的方式来说明:想象有 100 个线程正在等待从集合中取出一些东西。
同步方式:99 个线程进入睡眠状态,1 个线程获取其值。
并发方式:100 个线程立即获得它们的值,没有一个被搁置。
现在第二种方法比简单的 get 花费更多的时间,但只要至少有 2 个线程在持续使用它,由于并发执行,您节省的时间是非常值得的。
所以现在根据我的理解,同步方式是一个包装器并阻止整个集合对象,另一方面以并发方式只有集合内的对象得到同步,我们可以同时访问集合的 2 个或更多元素