SQLite什么都好,就怕“database is locked”这些年来想尽办法去规避它。...last_insert_rowid() newid 02:45:16.637 16 Y 9 Transaction.Commit ReadCommitted 从测试结果来看: 1,任务1申请得到11和12...,任务2也是 2,任务1申请得到11后,任务2启动,执行到Insert时阻塞了5.12秒,直到任务1回滚了事务 3,线程15和16是异步写日志,显然它们也被阻塞,线程15阻塞10.519秒,知道任务2提交事务...结论:SQLite执行更新事务操作时使用排它锁,强制自增数字同步分配!...参考: http://sqlite.1065341.n5.nabble.com/Transactions-and-sqlite3-last-insert-rowid-td8905.html
今天有个朋友测试 SQLite,然后得出的结论是: SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! 下面是他发给我的测试代码。...我晕~~~~~~ using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete...using System.Data; using System.Data.Common; using System.Data.SQLite; // 创建数据库文件 File.Delete("test1...为什么只是简单启用了一个事务会有这么大的差距呢?...很简单,SQLite 缺省为每个操作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + SQL 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因
:java.util.Observable和java.util.Observer,那么为何还要RxJava呢?...线程切换,生产者发布数据和观察者处理数据可以在指定线程中处理; RxJava还有个特点就是支持链式编码,再配合lambda,可以保持简洁和清晰的逻辑(注意是逻辑简洁,代码是否简洁只能取决于实际业务);...看得出,除了实现观察者模式,RxJava还提供了更丰富的能力,纯文字太枯燥了,我们来实战吧!...准备工作之三:支持lambda 支持lambda表达式具体表现在maven支持和intellij idea工具支持两个方面,具体设置请参照《设置Intellij idea和maven,支持lambda表达式...以上就是Rxjava基础入门的实战,希望大家一起实践并用到日常工作中,简化逻辑,提升效率;
而Rxjava则是一种基于异步数据流的处理方案。...如果一个订阅者需要注册多个事件的时候,Rxjava需要一个个单独的注册,而EventBus则可以实现一个订阅者订阅多个事件,和一个事件对应多个订阅者。...也就是,可以实现一个订阅者订阅多个事件,和一个事件对应多个订阅者。...使用 使用RxJava之前需要先添加相关的依赖: compile 'io.reactivex.rxjava2:rxjava:2.1.8' compile 'io.reactivex.rxjava2:rxandroid...如果你不调用request,Subscriber的onNext和onComplete方法将不会被调用。
SQLite是一款轻量级的数据库,广泛应用于各种软件和系统中。本文将深入探讨SQLite的存储引擎、索引、事务隔离级别、MVCC实现以及锁的类型和级别。...四、事务隔离级别和MVCC实现 SQLite实际上只支持两种事务隔离级别:串行化(SERIALIZABLE)和可重复读(REPEATABLE READ)。...4.3 小结 总结一下,SQLite通过MVCC实现了串行化和可重复读两种事务隔离级别。...这种锁定机制使得SQLite能够支持多个并发读取事务,以及一个写入事务。通过合理地使用和管理这些锁,SQLite能够在保证数据一致性的同时,实现较高的并发性能。...六、总结 总的来说,SQLite是一款功能强大的轻量级数据库。了解SQLite的存储引擎、索引、事务和锁对于使用SQLite开发应用非常重要。
主打方向:Vue、SpringBoot、微信小程序 一、SQLite 的下载 在第一篇 【SQLite】一、SQLite简介——MySQL的简洁版 中已经讲到。...SQLite 官网下载地址:SQLite官网 选择 Windows 版的 SQLite,进行下载操作。...二、SQLite 的解压 SQLite 下载完成后,在硬盘上新建一个文件夹,如 C:\java\sqlite。 将下载的两个压缩包文件解压到该文件夹下,如下图所示。...四、HeidiSQL 的下载和安装 HeidiSQL 是一款数据库可视化工具,有了它可以帮助我们更好的操作数据库。...五、小结 本文讲解了 SQLite 的下载、解压和启动,以及环境变量的配置方式,另外也讲解了 HeidiSQL 的安装方式,以及 HeidiSQL 对我们学习 SQLite 的作用,下节将正式讲解 SQLite
implementation "io.reactivex.rxjava2:rxjava:2.1.9" Observable/Observer 的使用 过去的 Observer 观察者回调有 onNext...-> emitter.onNext("create message") // 通知观察者,调用其 onNext 方法 emitter.onComplete() }) // 观察者,和...onSubscribe(d: Disposable) { disposable = d } // 订阅 observable.subscribe(observerStr) create 方法的参数和...比如 // accept 依次收到被观察者发过来的 a 和 b val disposable: Disposable = Observable.fromArray("a","b").subscribe(...return DisposableHelper.isDisposed(get()); } } 可见各种方法,最后都是调用了 Observer 里对应的方法,在 complete 和
RxJava 内置了几个 Scheduler,通过 Schedulers 来获取。 Schedulers.trampoline():当其它排队的任务完成后,在当前线程排队开始执行,FIFO。...Schedulers.single():拥有一个线程,和 newThread 相比,这个线程可以共用。 Schedulers.computation():计算所使用的 Scheduler。...行为模式和 newThread() 差不多,区别在于 io() 的内部实现是用一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下 io() 比 newThread() 更有效率。...然后根据外界传入的 Observer 和这个线程池封装出另一个 Observer。所以在 ObservableSubscribeOn 的对象 source 上用重新封装好的一个观察者订阅它。
转载请以链接形式标明出处: 本文出自:103style的博客 Base on RxJava 2.X 简介 首先我们来看subscribeOn和observeOn这两个方法的实现: subscribeOn...scheduler.scheduleDirect(new SubscribeTask(parent)),这里通过之前 RxJava之Schedulers源码介绍 我们知道,实际时候执行了 SubscribeTask...即为subscribe传入的observer的三次onNext和 一次onComplete。...onNext 和onComplete 则是在Schedulers.io()构建的线程池中执行的 。...所以,你知道RxJava是如何完成线程切换的了吗? 以上
今天要介绍两个我认为是RxJava中最牛逼的Operator, map和flatmap。 在掌握map和flatmap的基础上,就可以去了解RxJava的核心操作 lift() 。...可以说RxJava的核心是lift, 研究它需要对RxJava的基本操作符有一定概念和印象,很多初学者在对操作符没有印象的基础上就去了解它的核心,然后就在 lift() 这个api上被劝退了。...注意这里说的是他们的参数 Func1 在返回值上的差异,不要搞成map和flatmap的返回值了,这俩的返回值都一样。...flatmap() 和 map() 花这么多篇幅讲这两个方法是因为它们是进一步了解RxJava的切入口,看 flatmap() 的源码就明白了, public final Observable和自定义操作符,希望能帮你打开新世界的大门。 源码可以后台回复"操作符"获取。
数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...ORM解决方案 ActiveAndroid 以活动记录方式为Android SQLite提供持久化 SQLBrite SQLiteOpenHelper 和ContentResolver的轻量级包装 Realm...移动数据库:一个SQLite和ORM的替换品 ---- 7....后台处理 名称 描述 Tape 个轻快的,事务性的,基于文件的FIFO的库 Android Priority Job Queue 一个专门为Android轻松调度任务的工作队列 ---- 10....响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android
数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite数据库的...ORM解决方案 ActiveAndroid 以活动记录方式为Android SQLite提供持久化 SQLBrite SQLiteOpenHelper 和ContentResolver的轻量级包装 Realm...移动数据库:一个SQLite和ORM的替换品 7....后台处理 名称 描述 Tape 一个轻快的,事务性的,基于文件的FIFO的库 Android Priority Job Queue 一个专门为Android轻松调度任务的工作队列 10....响应式编程 名称 描述 RxJava JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android
的库 6 数据库 名称 描述 OrmLite JDBC和Android的轻量级ORM java包 Sugar 用超级简单的方法处理Android数据库 GreenDAO 一种轻快地将对象映射到SQLite...数据库的ORM解决方案 ActiveAndroid 以活动记录方式为Android SQLite提供持久化 SQLBrite SQLiteOpenHelper 和ContentResolver的轻量级包装...Realm 移动数据库:一个SQLite和ORM的替换品 7 依赖注入 名称 描述 ButterKnife 将Android视图和回调方法绑定到字段和方法上 Dagger2 一个Android和java...Android库 HelloCharts 兼容到API8的Android图表库 MPAndroidChart 一个强大的Android图表视图/图形库 9 后台处理 名称 描述 Tape 一个轻快的,事务性的...JVM上的响应式扩展 RxJavaJoins 为RxJava提供Joins操作 RxAndroid Android上的响应式扩展,在RxJava基础上添加了Android线程调度 RxBinding
多个 Observable 中,无论发射的是 onNext 还是 onComplete 或者 onError,只接受第一个发射数据的那个 Observable,...
编程式事务 Spring 手动操作事务和 MySQL 操作事务类似,也是分为开启事务,提交事务,回滚事务等三个操作,需要用到 DataSourceTransactionManager (事务管理器)来进行上述事务的操作...3.2. isolation @Transactional 注解的 isolation 属性是可以设置事务的隔离级别的,参数类型是一个 Isolation 的枚举类,依次表示当前数据库默认使用的隔离级别和事务的四种隔离级别...REQUIRES_NEW 把 UserService 和 LogService 的两个方法都设置为 REQUIRES_NEW 此时就是无论 A 有没有事务, B 都新创建事务,所以当 B 的一个方法有异常时...NESTED NESTED 是如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行,所以说 A 和 B 不是同一个事务,那么当 B 的一个方法出现异常时进行回滚,另一个 A 调用的方法是不受影响的...,也印证了这两个不是同一个事务,确实是创建了一个嵌套事务 和 REQUIRED 不同的是,那里用的是同一个事务,其中一个回滚,都要回滚,这里可以只是自己的事务进行回滚,也就是实现局部回滚 主页
RxJava相信大家都非常了解吧,今天分享一下RxJava的消息发送和线程源码的分析。最后并分享一个相关demo,让大家更加熟悉我们天天都在用的框架。...observable.subscribe(observer); 代码很简单,observable为被观察者,observer为观察者,然后通过observable.subscribe(observer),把观察者和被观察者关联起来...接着还是像原来那样调用subscribe()方法进行订阅,看起来好像整体变化不大,就是封装了一些对象而已,不过着恰恰是RxJava源码的精华,当他再次调用subscribeActual()方法时,已经不是之前的...source.subscribe调的是ObservableSubscribeOn的 subscribe方法,而subscribe方法因为继承的也是Observable,是Observable里的方法,所以和上面的...为了让你们理解更清楚,我仿照RxJava写了大概的消息订阅和线程切换的最基本代码和基本功能,以帮助你们理解 https://github.com/jack921/RxJava2Demo
一个队列中,一次性、顺序性、排他性的执行一系列命令 二、事务基本指令 multi:设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中 exec:设定事务的结束位置,同时执行事务,与multi...: 将set指令放入事务队列 创建事务后,del执行流程: 将del指令放入事务队列 创建事务后,exec执行流程: 顺序执行事务队列中的指令,并销毁队列 创建事务后,discard执行流程...这个监视锁的功能好像也能用MySQL中的排它锁和共享锁实现 天猫双11热卖过程中,对已经售罄的货物追加补货,4个业务员都有权限进行补货。...必须在开启事务multi前执行 取消对所有key的监视 unwatch # 取消所有数据的监视锁 客户端A监视name和age,开启事务,准备执行一系列操作...watch监视锁解决,此时一个客户端对商品进行监视,他购买时如果其他客户端购买了(修改了商品数量),他就不能购买(exec),这是不符合逻辑的,只要商品有库存,大家应该允许同时购买,只需要保证购买成功的数量和商品减少的数量相等就行
extends T> source2) // 数组和集合,意思一样 public static Observable concat(Iterable<?...toString()) }) 最终打出的日志按顺序是 1,2,3,4,5,a,b,c concatDelayError 和 concatArrayDelayError 是推迟发射 onError。...extends T>... sources) // 集合和上面的可变参数可以看成一样的 public static Observable concatEager(Iterable和 concat 作用没什么区别。它是并发处理多个 Observable,而不像 concat 那样串行处理,但是又能够保证最终的顺序。...extends T>> sources 应该和 concat 里用这个参数的重载方法差不多,就不写代码测试了。
二、Spring 中事务的实现 Spring 中的事务操作分为两类: 编程式事务(手动写代码操作事务)。 声明式事务(利用注解自动开启和提交事务)。...提交事务 commit; 回滚事务 rollback; 2、Spring 编程式事务(了解) Spring 手动操作事务和上面MySQL 操作事务类似,它也是有 3 个重要操作步骤: 开启事务(获取事务...3、Spring 声明式事务(自动) 声明式事务的实现很简单,只需要在需要的方法上添加 @Transactional 注解就可以实现了,无需手动开启事务和提交事务,进入方法时自动开启事务,方法执行完会自动提交事务...事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过⼀样。 ⼀致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。...隔离性:数据库允许多个并发事务同时对其数据进⾏读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不⼀致。
d: Disposable) {} override fun onError(e: Throwable) {} }) Maybe/MaybeObserver Maybe 是 Single 和...fun onSubscribe(d: Disposable) { } override fun onError(e: Throwable) { } }) onSuccess 和...源码分析 和 Observable 源码流程大体相似。...CompletableCreate 内部的 Emitter 只有 onComplete 和 onError,能发射什么是由这个 Emitter 控制的,在 onComplete 后也切断了联系。...方法,有和 Completable 中相似的 onComplete 方法,无论执行了哪个,在 finally 里都 dispose 切断联系。
领取专属 10元无门槛券
手把手带您无忧上云