零碎笔记

创建线程可以继承Thread类,也可以实现Runnable接口,创建Runnable对象作为参数传入Thread来创建。这两种实际上是一样的,因为本身Thread也是实现Runnable接口。不过在实践中还是最好用后一种创建方式,什么原因呢,Doug lea文章里说,一个是将代码分散到各个类里,可以避免开发者Thread类和Runnable中同步方法和同步块的交互,(我想,大概就是说你的类里不需要继承Thread,这样就是has a thread,而不是is a thread,这样也就减少了继承thread类里一堆synchronized方法,比如start stop join等,至于什么时候会纠结进去,怎么个纠结法,还不太能体会到)。第二,这样可以对操作的运行(Runnable run方法实现)和运行的上下文(Thread外壳)有着独立的控制(不同的类)(这个也是有个那么个朦胧的感觉,不能很清晰的体会)。第三,实现的Runnable可以传到不同的Thread里去同时初始化不同的线程,继承Thread类虽然也可以装成一个runnable去做参数,看起来总归是很丑陋,代码生搬硬套组装的样子,应该还有别的麻烦,另外继承了Thread类就不能再继承别的了。
  Thread的priority由它所属threadgroup决定,如果设置priority高于线程组的最高priority的话,那是无效的,不过threadgroup默认priority上线已经是MAX_PRIORITY了。
  Sleep方法是static方法,是让调用它的线程sleep多少秒,而join不是static,只能由对象调用,则是代码执行到这一步的线程等这个调用线程多少ms,或者一直等到执行完毕。yield只是给别的线程一个执行机会,在抢占式的os调度里。按源码注释的说法,很少用到。
====================================================================================
ORM框架的好处就是将面向对象的思想和关系型数据库联系起来,使开发人员只需要关注于业务代码设计而无需考虑与数据库的联系,操作的是对象而不是从数据库中取出来的数据。
====================================================================================
template是把固定不变的那些提取出来做模板,callback则是把可变的那一部分单独提取出来,作为一个独立体。

你可能感兴趣的:(笔记)