并发和阻塞
文章平均质量分 89
黑木爷
这个作者很懒,什么都没留下…
展开
-
Java AQS锁实现原理
最后,我想说的是,AQS的实现思想并不仅仅局限于在读写锁中使用,在很多Java中间件、JVM以及操作系统中都有运用,包括其他语言中也有运用。判断队列中有没有其他线程在等待锁,或者当前线程是第一个在等待锁的线程,也就是等待队列中第一个线程,然后CAS尝试修改锁状态,设置当前线程为锁拥有者。从代码实现上看,能看到的变量几乎都是volatile的,能看到的方法几乎都是CAS或者Unsafe类的原子方法。这几个方法是使用AQS类的关键,只有这几个方法是可以定制的,其他方法几乎都是final的,不可修改。......原创 2022-08-14 14:03:28 · 433 阅读 · 0 评论 -
1.并发情况导致的线程阻塞和数据一致性问题
所有的并发场景导致的问题都可以归结为两种,即并发问题有两种 :线程阻塞和数据一致性。前者是由于接口不能及时处理当前线程请求,导致丢失其他线程请求;后者是由于并发修改同一记录,可能导致更新丢失,导致数据一致性问题。原创 2017-04-28 10:54:42 · 722 阅读 · 0 评论 -
1-1.线程阻塞
在高并发情况下容易出现请求丢失(实际是线程阻塞)的问题,原因就是接口或服务是单线程的,而且没有加其他机制。请求丢失其实就是接口阻塞造成的,而阻塞一般由于单线程造成的。更正:目前主流web服务器(如tomcat)本身就被设计成多线程的,对每一个http请求服务器都会启动一个线程来处理,这就意味着我们的接口天然就是多线程的。服务器自身的配置就已经决定了能同时并发的线程数,所谓的线程原创 2017-04-28 10:55:15 · 449 阅读 · 0 评论 -
1-2.数据一致性问题
避免并发造成数据不一致的问题,即不希望因为并发操作导致数据不一致或结果不准确。基本思路就是不让线程同时操作,将并发操作顺序化,方法有:1.加锁(分布式锁)当多个线程同时操作时,由于有锁的原因,只有第一个获得锁的线程才能操作,其他线程将按获得锁的顺序进行操作;2.使用缓存或队列(并发请求串行化)将所有的线程请求放到队列中,然后从队列中取线程操作。跟线程原创 2017-04-28 10:55:38 · 362 阅读 · 0 评论