多线程时控制并发数据库操作的思路

时间:2022-09-08 14:29:33

忠告: 在可能的情况下,尽量不要使用多线程!

 

多线程问题的出现原因,比如写库这类操作是非常费时的操作,为了不影响主线程的运行,就把这种费时的操作移除主线程,进行异步操作。但是,异步操作就不可能会出现脏数据(极端时间内针对同一条数据进行写和读,读的数据是写之前的数据,导致数据错误)

解决思路: 把并发的操作串行化!!

如果做到这一点:

1) 首先要保证发起操作的时序。 这就要求对同一条数据的操作要来自同一个线程。如果操作本身的线程都无法确定,那有如何去确定正确性呢。而且那样很容易发生死锁。

2)其次要保证同一数据的每条操作能够顺序执行完毕,只有执行完前一条才允许执行后一条。因此一条操作执行时需要对数据进行加锁,执行完成后解锁。收到解锁通知后才会继续触发后续操作。

3) 尽量保证每条操作的数据需求单一化。一旦操作需求多条数据,就很可能出现死锁。