开发中一些关于多线程的思考:
Android开发过程其实并没有太多的线程并发的问题,当然也会有所遇到。比如关于用户状态,每一次网络请求都需要用户的信息,当然,用户信息初始化之后,一般都不会再此初始化,因此可以选择读多写少的策略;而写多读少在客户端并不常见,服务端遇到的情况比较多,如网上购物的时候,某一件商品的数量,每一次的购买行为都会去修改商品的数量。
选择不同的策略,当然也用不同的方案处理。
synchronized
特点:简单、java关键字、在jvm层面上、少量同步、无法判断锁的状态
缺点:大量同步,竞争激烈的情况下,会造成明显的性能下降,大部分的线程都在等待资源的释放,因为无法获得锁的状态,只能陷入等待状态。
Lock
特点:类、手动释放锁、大量同步、可以判断锁的状态
缺点:因为可以通过tryLock的方法去判断锁的状态,所以线程可以不用进入等待的状态。但是使用的时候在finally中必须要释放锁,不然会造成死锁的状态。
资源在初始化之后,其它线程的访问不会去修改最初的版本,享资源改变也不会影响到其它线程的使用。
优先选择使用ThreadLocal
ThreadLocal
网友评论