• 并发问题java


    两个重要的概念:同步和异步

    同步,按照流程顺序一步一步的执行,等待获取单步的返回结果并执行下一步;发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

    同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这个方法给他回复,否则他不往下执行(死心眼)。

    异步,按照流程顺序一步一步的执行,不等待单步的返回结果就执行下一步;发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。

     异步在一定程度上可以看做是多线程的(废话,一个线程怎么叫异步),请求一个方法后,就不管了,继续执行其他的方法。

    并发

    并发,同时对同一对象或者数据进行操作。

    脏数据

    脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这
    个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。

    数据为2,A操作+1,B操作*2;

    正常情况A->B:2+1 =3,3*2=6,结果为6;

    非正常情况AB并发:2+1 =3,2*2=4,结果为4;2*2=4,2+1 =3,结果为3;2*2=4,4+1 =5,结果为5;

    并发问题的解决方法--个人理解

    1、流程性的问题

    第一种:开发人员必知的方法:java中的同步锁,典型的就是同步关键字synchronized

    第二种:数据处理方法:增加上锁表,读取上锁表的记录判断是否上锁;使用Redis等加锁,控制单一操作;

    2、数据性的问题

    第一种:数据版本方式,增加类似版本字段,通常使用创建时间时间戳,并在update时校验。

    未完待续。

  • 相关阅读:
    (void) (&_x == &_y)的作用
    GNU C 与 ANSI C(下)
    GNU C 与 ANSI C(上)
    “多个单核CPU”与“单个多核CPU”哪种方式性能较强?
    ARM 处理器寻址方式之间接寻址的几种表达
    Video for Linux Two API Specification
    UVC 驱动调用过程与驱动框架的简单分析
    线程安全
    合法的立即数的判断
    Redis的Java客户端Jedis
  • 原文地址:https://www.cnblogs.com/huasky/p/7489657.html
Copyright © 2020-2023  润新知