大数据下高并发的处理详解本文章来自于阿里云云栖社区对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了
而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉那我们就要想想应对措施,今天我们就一起讨论一下常见的并发和同步吧
首先为了更好的理解并发和同步,我们需要首先明白两个重要的概念:同步和异步同步和异步的区别和联系所谓同步,就是一个线程执行一个方法或函数的时候,会阻塞其它线程,其他线程要等待它执行完毕才能继续执行
异步,就是多个线程之间没有阻塞,多个线程同时执行
通俗一点来说,同步就是一件事一件事的做,异步就是做一件事,不影响做其他事情
例如:吃饭和说话,只能一件一件的来,因为只有一张嘴
但是吃饭和听音乐是异步的,可以一起进行,因为听音乐并不影响我们吃饭
对于Java程序员来说,Synchronized最为熟悉了,如果它作用于一个类的话,那么就是一个线程访问类的方法时,其他线程就会阻塞,相反,如果没有这个关键字来修饰的话,不同线程就可以在同一时间访问同一个方法,这就是异步
脏读和不可重复读脏读脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这是,另外一个事务也访问这个数据,然后使用了这个数据
因为这个数据是还没有提交的数据,那么另外一个事务读取的这个数据是脏数据(DirtyData),依据脏数据所做的操作可能是不正确的
不可重复读在第一个事务读取数据后,第二个事务对数据进行了修改,导致第一个事务结束前再访问这个数据的时候,会发现两次读取到的数据是不一样的,因此称为不可重复读
如何处理并发和同步今天讲的如何处理并发和同同步问题主要是通过锁机制
我们需要明白,锁机制有两个层面
一种是代码层次上的,如果Java中的同步锁Synchronized,另一种是数据库层次上的,比较典型的就是悲观锁(