1、
Java中类之间的六种关系:
第一种:继承关系,例如:子类继承父类,子接口继承父接口。
第二种:实现关系,例如:类实现接口。
第三种:依赖关系,例如:一个类作为另一个类中方法的参数存在,这种关系具有偶然性和临时性。
第四种:关联关系,例如:一个类作为另一个类中的成员变量存在,它是一种强依赖关系。
第五种:聚合关系,例如:整体和部分之间,他们是可以分离的拥有各自的生命周期,并且部分是相同的。像鸟群和鸟。
第六种:组合关系,它是一种强聚合,并且整体和部分之间不可分离,具有相同的生命周期,整体包含该部分,也包含其他部分,其他部分和该部分是不相同的,像cpu和计算机,计算机除了包括cpu还有键盘和显示器等。
3、
图片说明
4、
一般线程调度模式分为两种——抢占式调度和协同式调度。抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。协同式调度指某一线程执行完后主动通知系统切换到另一线程上执行,这种模式就像接力赛一样,一个人跑完自己的路程就把接力棒交接给下一个人,下个人继续往下跑。线程的执行时间由线程本身控制,线程切换可以预知,不存在多线程同步问题,但它有一个致命弱点:如果一个线程编写有问题,运行到一半就一直堵塞,那么可能导致整个系统崩溃。
java采用的是抢占式调度方式。
5、
图片说明
所谓的释放锁资源实际是通知对象内置的monitor对象进行释放,而只有所有对象都有内置的monitor对象才能实现任何对象的锁资源都可以释放。又因为所有类都继承自Object,所以wait()就成了Object方法,也就是通过wait()来通知对象内置的monitor对象释放,而且事实上因为这涉及对硬件底层的操作,所以wait()方法是native方法,底层是用C写的。
其他都是Thread所有,所以其他3个是没有资格释放资源的
而join()有资格释放资源其实是通过调用wait()来实现的