【JAVA并发】
青山师
编码、架构、程序人生;此博客输出内容永久免费,长期分享JAVA开发技术
展开
-
spin_lock 自旋锁 和 mutex_lock 互斥锁的区别
spin_lock 自旋锁 和 mutex_lock 互斥锁的区别内核锁的讨论:为什么需要内核锁?多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保护,即互斥处理有哪些内核锁机制?(1)原子操作atomic_t数据类型,atomic_inc(atomic_t *v)将v加1 原子操作比普通操作效率要低,因此必要时才使用,且不能与普通转载 2017-08-10 17:11:15 · 1835 阅读 · 0 评论 -
自旋锁(spinlock)
自旋锁(spinlock) 自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。 由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。 信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下转载 2017-08-10 16:51:53 · 508 阅读 · 0 评论 -
基于CAS思想的java并发AtomicBoolean实例详解
java.util.concurrent.atomic该包是JDK1.5开始提供的,它提供了类的小工具,支持在单个变量上解除锁的线程安全编程。此包中的类可将 volatile 值、字段和数组元素的概念扩展到那些也提供原子条件更新操作的类,其形式如下: boolean compareAndSet(expectedValue, updateValue);CAS思想我们看到了上面提到的一个在java原创 2017-09-13 22:58:47 · 905 阅读 · 0 评论 -
并行的2个重要定律Amdahl、Gustafson定律
并发程序的几个概念同步(Synchronous) 异步(Asynchronous) 阻塞 (Blocking)非阻塞 (Non-Blocking)死锁 (Deadlock)同步和异步通常用来形容方法的调用方式。 同步的方法调用时,后续行为需要等到方法执行完毕后才能执行。 异步调用时,一旦调用可以立即拿到结果,调用方可以继续后续的操作。举个生活中的例子,两件事:煮饭、烧菜。同步就是原创 2017-06-04 16:46:21 · 8295 阅读 · 2 评论 -
Java并发阻塞队列BlockingQueue概览
BlockingQueuejava.util.concurrent包下的 BlockingQueue 接口规范了一个放数据、取数据都是线程安全的队列。 BlockingQueue的用法一个典型的使用 BlockingQueue 的应用场景是 生产-消费者模型。 一个线程往队列生产数据,另一个队列消耗数据生产线程会持续生产新的实例放入队列中,直到队列容量达到指定值。也就是说,如果队列数据大小达翻译 2017-07-22 15:40:47 · 755 阅读 · 0 评论 -
Java并发之Condition--生产者、消费者案例以及部分源码解读
文章目录Java并发之Condition案例await()方法源码解析1. addConditionWaiter()方法创建一个代表当前线程的Node到条件队列的尾部1.1 清除条件队列中已取消的节点的链接2 fullyRelease(Node node)2.1 ReentrantLock.Sync#tryRelease 方法2.2 AbstractQueuedSynchronizer.unpar...原创 2019-06-11 18:03:16 · 468 阅读 · 0 评论