java并发编程和高并发解决方案

一、并发和高并发是什么
并发:指同时拥有两个或多个线程;如果程序在单核处理运行,多个线程将交替换入或者换出内存,这些线程是同时存在的,每个线程都处于执行过程中的某个状态;如果运行在多核处理器上,程序中的每个线程都将分配到一个处理器上,因此可以同时运行

高并发:指保证系统能够并行处理很多请求

二、并发和高并发的区别
侧重点细微不同,并发侧重于多个线程操作相同的资源,保证线程安全,合理利用资源;高并发指系统运行的过程中短时间内遇到大量操作请求的情况,要求服务能够同时处理很多请求,提高程序性能

三、并发编程(并发问题解决方案)
主要通过锁机制,代码层面就是java的同步锁(synchronized);数据库层面就是用悲观锁或者乐观锁

1、悲观锁
悲观锁的实现机制,往往依靠数据库提供的锁机制(也只有数据库层的锁机制才能真正保持数据访问的排他性,否则即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)
一个典型的依赖数据库的悲观锁调用:
select * form account where name=‘admin’ for update
这条sql语句锁定account表中所有符合条件查询的记录,在事物提交前(事务提交时会释放是事务过程中的锁),外界无法修改这些记录
注意:for update 要放在mysql的事物中,即begin和end之间,否则不起作用

2、乐观锁
乐观锁大多是同过数据库版本(version)记录机制实现的,即为数据增加一个版本标识,在基于数据库表的解决方案中,一般是在表中增加一个version字段来实现,读取数据时将版本号一起读取,在更新操作时将版本号加1,将提交的数据的版本号和数据库中的数据版本号进行比较,若大于数据库中数据的版本号,则提交更新数据,否则认为是过期数据,无法提交,抛出异常。

四、高并发解决方案
1、应用服务器:扩容(集群)
2、缓存:读操作加缓存(reids)
3、数据库:读写分离,分表
4、消息队列

参考文档:
https://www.2cto.com/kf/201809/778094.html
https://blog.csdn.net/niunai112/article/details/79407181

猜你喜欢

转载自blog.csdn.net/qq_34300892/article/details/87801216
今日推荐