面向对象的三个特征:继承 封装和多态
- 继承:可以使用现有类已有的所有方法,无需重新编写即可对现有类进* 行扩展。可以通过继承和组合来实现
- 封装:向外提供接口,隐藏了内部的具体实现
- 多态:同一消息可以根据发送对象的不同采用不同的行为方式
多线程
死锁的四个必要条件:
从以上分析可见,如果在计算机系统中同时具备下面四个必要条件时,那麽会发生死锁。换句话说,只要下面四个条件有一个不具备,系统就不会出现死锁。
互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。如独木桥就是一种独占资源,两方的人不能同时过桥。
不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。如过独木桥的人不能强迫对方后退,也不能非法地将对方推下桥,必须是桥上的人自己过桥后空出桥面(即主动释放占有资源),对方的人才能过桥。
占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。还以过独木桥为例,甲乙两人在桥上相遇。甲走过一段桥面(即占有了一些资源),还需要走其余的桥面(申请新的资源),但那部分桥面被乙占有(乙走过一段桥面)。甲过不去,前进不能,又不后退;乙也处于同样的状况。
循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。
上面我们提到的这四个条件在死锁时会同时发生。也就是说,只要有一个必要条件不满足,则死锁就可以排除。
来自:http://blog.csdn.net/hijiankang/article/details/9157365
不要调用Thread类或Runnable对象的run方法。直接调用run方法只会在当前线程中执行任务,并不会启动新的线程,正确的做法是调用Thread.start方法,它会创建一个新的线程来执行run方法
final关键字:
向编译器告知一块数据是恒定不变的(一个永不改变的编译期常量)
在对这个常量进行定义的时候,必须对其进行赋值
final方法:使用final方法的原因有两个,第一个是把方法锁定,以防止任何继承类修改它的含义。
第二个原因是效率
类中的所有private方法都是被隐式被指定为final的
final类
当将某个类的整体定义为final时,就表明了你不打算继承该类,也不允许别人这样做。
this关键字:
public class BananaPeel{
public static void main(String[] args)
Banana a = new Banana();
Banana b = new Banana();
a.peel(1);
}
编译器做了一些幕后工作,他暗自把“所操作的对象的引用”作为第一个参数传递给peel()。所以上述两个方法调用就变成了这样:
Banana.peel(a,1);
Banana.peel(b,2);
这是内部的表示形式,我们并不能这样书写代码,并尝试通过编译。
- this关键字只能在方法的内部使用,表示对“调用方法的那个对象”的引用
- 在构造器中,如果为this添加了参数列表,那么久有了不同的含义,这将对符合此参数列表的某个构造器明确调用,这样,调用其它构造器就有了直接的途径。但是this只能用于调用一个构造器,不能调用两个,并且用this关键字调用构造器时,必须将构造器调用置于最起始位置,否则会报错
static 方法就是没有this的方法,在static方法的内部不能调用非静态方法,反过来可以