android-discuss icon indicating copy to clipboard operation
android-discuss copied to clipboard

android中数据库支持多线程吗?

Open 551780457 opened this issue 9 years ago • 12 comments

「对于android中多线程的理解」 「谈一谈对多线程加锁的理解」 还被问到过 「一个方法里如果出现两次sync关键字,会不会造成死锁」... 想要深入了解一下,请大家推荐下这方面的优秀博文~

551780457 avatar Sep 08 '15 07:09 551780457

Android系统在起来一个Application会开户一个进程和一个Main线程,Android支持Java语言,所以它支持Java中线程和管理, 需要注意是UI线程和Android中对多线程的一些扩展类,如AsyncTask等等。 多线程加锁的目的是为了防止几个线程访问一块代码或者变量,可以对代码块或者方法加对象监视器。一个方法出现几次sync并不造成死锁, 死锁是某个代码块自己不执行也不让别人去解锁。 Android的数据库肯定是支持多线程,不然ContentProvider怎么能够支持多个程序访问...

wangchezheng avatar Oct 14 '15 02:10 wangchezheng

SQLite似乎是不支持多线程的

atearsan avatar Oct 14 '15 03:10 atearsan

是的,后来我看了一些stackFlow上的评论,说多线程要换个数据库。但SQLITE可以利用ContentProvider提供给多个进程使用,Android应该有封装让它支持多线程,个人感觉!

wangchezheng avatar Oct 14 '15 13:10 wangchezheng

@wangchezheng 换个数据库指的是哪个呢?

wozuihighwa avatar Oct 17 '15 12:10 wozuihighwa

SQLite是不支持多线程操作的,会导致一些访问上的问题

WenruiCui avatar Oct 17 '15 15:10 WenruiCui

OMZ sqlite不支持多线程?.........................

cpoopc avatar Oct 19 '15 09:10 cpoopc

when two threads attempt to write to the database at the same time, the SQLiteDatabase will lock itself down, ensuring that one will wait until the other has completed.//当两个线程尝试同时向database写入的时候,SQLiteDatabase会把自身lock,确保只有一个线程可以获取资源,其他的线程必须等待到资源释放.

zhangxiaang avatar Oct 20 '15 03:10 zhangxiaang

sqlite支持多线程。但是安卓在封装sqlite的java接口的时候加了表锁,所以会造成多个线程读一个表的时候阻塞。这也是为什么读写数据库的操作要放到线程里做,防止ANR。

ckitterl avatar Oct 20 '15 10:10 ckitterl

sqlite 底层操作做了lock的操作,所以android的content provider的方法没有synchronize修饰,是支持多线程并发的。除非content provider 底下的数据不是sqlite,那么当多线程的时候你需要考虑同步的问题了。

ttgdz avatar Jun 21 '16 06:06 ttgdz

Android的SQLite不支持多线程写。它底层有一个数据库级别的lock机制,多个线程,同一时刻,只有一个线程能写,其他线程都被阻塞,必须等当前线程写完,才能写。不过,你在代码里以多线程的方式写SQLite,也不会抛出诸如“ Database is locked”的异常。另外SQLite支持多线程读。 上述结果,是我在Android 8.0上测试得出的结果。

kanglongba avatar Jan 01 '18 17:01 kanglongba

楼上的说法就矛盾了,每个时刻只有一个线程写,其他线程被阻塞,理解成不支持多线程写?请问哪种多线程写不是这样的方式呢?如果不阻塞,这样的多线程有啥子意义。

fmliqi avatar Jul 19 '18 07:07 fmliqi

操作同一个SQLiteHelper对象是线程安全的。

HomHomLin avatar Jul 19 '18 08:07 HomHomLin