fogcoding
fogcoding
锁是为了避免自己在修改资源的时候,别人同时在修改,导致同一时间产生两份修改,不知道如何处理的情况而设置的独占资源,避免多个操作同时处理同一资源的技术。 乐观锁:默认为,某个线程在自己处理共享资源的时候,不会出现同一时刻来修改此资源的前提,只在处理完毕,最后写入内存的时候,检测是否此资源在之前未被修改。类似于读写锁的读锁就是乐观锁。 悲观锁:默认为,某个线程在自己处理共享资源的时候,一定会出现同一时刻来修改此资源,所以刚拿到这个资源就直接加锁,不让其他线程来操作,加锁在逻辑处理之前。类似,synchronized关键字,条件锁,数据库的行锁,表锁等就是悲观锁。
> 这句话应该改成: 不能更新非本线程创建的View 源码里面的注释是只能创建view的线程去更新该view,所以理论上是可以子线程创建,然后子线程更新的,但有个问题:子线程创建的View可以不通过主线程显示吗?如果不能越过主线程显示,那结果等价于子线程不能更新UI,因为不能被看到的View毫无意义啊。
我翻到了上面有个哥子发了篇博客,博客里说到了更新ui时通常会调用requestLayout方法,最终调用到ViewRootImpl的requestLayout方法。 ``` public void requestLayout() { if (!mHandlingLayoutInLayoutRequest) { checkThread(); mLayoutRequested = true; scheduleTraversals(); } } ``` 只要条件判断不成立,就能跳过线程检查的步骤。 然后博主搞了个骚操作,先在主线程更新UI,使得performLayout设置mHandlingLayoutInLayoutRequest为true,然后趁着主线程更新状态还没完成,马上又去用子线程更新UI,成功了。 这个无疑是对更新逻辑的利用,但是仍旧无法实现直接在子线程直接更新UI,也并没有回答让子线程创建的View在window中显示出来,并且还能更新UI的问题。 现在暂时没空去花时间仔细研究个结果,但上面的话无疑是对更新UI的知识的推进,所以贴了上来。 有进一步推进理解的,请指教。
> 正在开展中,其实不是不添加SpringBoot 源码阅读相关信息,在Spring上有很多内容还没有写成文档,大部分在源码上直接注释了。提炼成文档还需要时间。SpringBoot 还在后续的安排中。 哈哈,开心! 开了项目我会来参与的!
> @fogcoding 我目前在研读 netty 的源码,SpringBoot 框架 @huifer 会进行跟进,如果还有什么感兴趣的框架源码,欢迎加入我们 源码猎人,共同成长 了解!积极参与!
> @fogcoding SpringBoot 已经正式开始,第一篇文章: [SpringBoot启动流程梳理](https://github.com/doocs/source-code-hunter/blob/master/docs/SpringBoot/Spring-Boot-Run.md)已经上线 收到!