android-discuss
android-discuss copied to clipboard
android中数据库支持多线程吗?
「对于android中多线程的理解」 「谈一谈对多线程加锁的理解」 还被问到过 「一个方法里如果出现两次sync关键字,会不会造成死锁」... 想要深入了解一下,请大家推荐下这方面的优秀博文~
Android系统在起来一个Application会开户一个进程和一个Main线程,Android支持Java语言,所以它支持Java中线程和管理, 需要注意是UI线程和Android中对多线程的一些扩展类,如AsyncTask等等。 多线程加锁的目的是为了防止几个线程访问一块代码或者变量,可以对代码块或者方法加对象监视器。一个方法出现几次sync并不造成死锁, 死锁是某个代码块自己不执行也不让别人去解锁。 Android的数据库肯定是支持多线程,不然ContentProvider怎么能够支持多个程序访问...
SQLite似乎是不支持多线程的
是的,后来我看了一些stackFlow上的评论,说多线程要换个数据库。但SQLITE可以利用ContentProvider提供给多个进程使用,Android应该有封装让它支持多线程,个人感觉!
@wangchezheng 换个数据库指的是哪个呢?
SQLite是不支持多线程操作的,会导致一些访问上的问题
OMZ sqlite不支持多线程?.........................
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,确保只有一个线程可以获取资源,其他的线程必须等待到资源释放.
sqlite支持多线程。但是安卓在封装sqlite的java接口的时候加了表锁,所以会造成多个线程读一个表的时候阻塞。这也是为什么读写数据库的操作要放到线程里做,防止ANR。
sqlite 底层操作做了lock的操作,所以android的content provider的方法没有synchronize修饰,是支持多线程并发的。除非content provider 底下的数据不是sqlite,那么当多线程的时候你需要考虑同步的问题了。
Android的SQLite不支持多线程写。它底层有一个数据库级别的lock机制,多个线程,同一时刻,只有一个线程能写,其他线程都被阻塞,必须等当前线程写完,才能写。不过,你在代码里以多线程的方式写SQLite,也不会抛出诸如“ Database is locked”的异常。另外SQLite支持多线程读。 上述结果,是我在Android 8.0上测试得出的结果。
楼上的说法就矛盾了,每个时刻只有一个线程写,其他线程被阻塞,理解成不支持多线程写?请问哪种多线程写不是这样的方式呢?如果不阻塞,这样的多线程有啥子意义。
操作同一个SQLiteHelper对象是线程安全的。