【发布时间】:2018-11-15 22:39:06
【问题描述】:
我只是想知道为什么非阻塞并发比阻塞并发更好。在阻塞并发中你的线程必须等到其他线程完成它的执行。所以在这种情况下线程不会消耗 CPU。
但是,如果我谈论非阻塞并发,线程不会等待获得锁,如果某些线程包含锁,它们会立即返回。
例如在ConcurrentHashMap 类中,在put() 方法中,tryLock() 在循环中。由于tryLock() 是非阻塞的,其他线程将处于活动状态并不断尝试检查锁是否已被释放。我假设在这种情况下,不需要使用 CPU。
那么暂停线程直到其他线程完成执行并在工作完成时唤醒线程不是很好吗?
【问题讨论】:
-
这取决于你是否希望(例如)你的整个程序因为一件事还没有完成而被阻止。
-
ConcurrentHashMap 不会锁定整个集合,因此可以有 2+ 个线程使用这种类型的集合,与同步 hashmap 相比,它提高了性能,例如
标签: java multithreading concurrency locking spinlock