推崇接口继承(implements关系) 尽量避免使用实现继承(extends 关系)。
高内聚 低耦合
在一个用extends的继承实现系统中,派生类是非常紧密的和基类耦合,要知道这种紧密的连接是不期望的。
接口实现的功能和抽象类的唯一区别就是解决了java中没有多继承的问题。其他功能完全可以由抽象类替代。
接口的一个重要做用就是实现了面象对象 最重要的特性多态,另外一个作用就是规范而且统一了方法的名称。
多线程编程的目的,就是"最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。每个程序执行时都会产生一个进程,而每一个进程至少要有一个主线程。这个线程其实是进程执行的一条线索,除了主线程外你还可以给进程增加其它的线程,也即增加其它的执行线索,由此在某种程度上可以看成是给一个应用程序增加了多任务功能。当程序运行后,您可以根据各种条件挂起或运行这些线程,尤其在多CPU的环境中,这些线程是并发运行的。多线程就是在一个进程内有多个线程。从而使一个应用程序有了多任务的功能。多进程技术也可以实现这一点,但是创建进程的高消耗(每个进程都有独立的数据和代码空间),进程之间通信的不方便(消息机制),进程切换的时间太长,这些导致了多线程的提出,对于单CPU来说(没有开启超线程),在同一时间只能执行一个线程,所以如果想实现多任务,那么就只能每个进程或线程获得一个时间片,在某个时间片内,只能一个线程执行,然后按照某种策略换其他线程执行。由于时间片很短,这样给用户的感觉是同时有好多线程在执行。但是线程切换是有代价的,因此如果采用多进程,那么就需要将线程所隶属的该进程所需要的内存进行切换,这时间代价是很多的。而线程切换代价就很少,线程是可以共享内存的。所以采用多线程在切换上花费的比多进程少得多。但是,线程切换还是需要时间消耗的,所以采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。上述结果只是针对单CPU,如果对于多CPU或者CPU采用超线程技术的话,采用多线程技术还是会提高程序的执行速度的。因为单线程只会映射到一个CPU上,而多线程会映射到多个CPU上,超线程技术本质是多线程硬件化,所以也会加快程序的执行速度。
分享到:
相关推荐
java中extends与implements的区别.docx
public class findmin extends Applet implements ActionListener JavaAppliet程序,在文本框里输入三个数,显示最小数
TalkProgram extends Frame implementsTalkProgram extends Frame implements
ate final String[] COMMAND={"Backspace","CE","C"}; private final String[] M={" ","MC","MR","MS","M+"}; private JButton keys[]=new JButton[KEYS.length]; private JButton commands[]=new JButton[COMMAND....
Javaextends与implements的区别.docx
java中extends与implements的区别浅谈,需要的朋友可以参考一下
Class属性Extends和Implements有什么区别,想必很多新手朋友们都不知道吧,下面通过实例为大家详细的介绍下,感兴趣的朋友可不要错过
C)class x extends y implements y1 {...} D)class x {...} 4.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( D)。 A) float A a; B) public A a=A( ); C) A a=new int( ); D) static A a=new A( )...
public class Calculator extends JFrame implements ActionListener{ JFrame jf; JTextField jtf; JButton jishu = new JButton("="); String sign[] = new String[]{"+","-","*","/","."}; String ops[] = ...
public class BlurAndSharpenDemo extends JFrame implements ActionListener { private JPanel jPanel = new JPanel(); //面板jPanel用于容纳模糊、锐化、还原图像按钮 private JButton buttonFile; //打开图像...
相对Hibernate和Apache OJB 等“一站式”ORM解决方案而言,ibatis 是一种“半 自动化”的ORM实现。 所谓“半自动”,可能理解上有点生涩。纵观目前主流的ORM,无论Hibernate 还是 Apache OJB,都对数据库结构提供了...
class ShanChu extends Frame implements ActionListener { //删除报警点的程序模块 } class MoNi extends Frame implements ActionListener { //模拟报警的程序模块 } public class A extends JFrame{ //地图的...
详细介绍如何用递归的思想完成著名的汉诺塔问题,当你看完之后,相信你一定会对汉诺塔有一个新的认识的
用java编写流星雨的代码,用到JFrame、JPanel等
import java.io.*; public class FirstPart{ public static void main(String[] args) throws Exception{ System.out.print("The input Fahrenheit is "); BufferedReader br = new BufferedReader(new ...
extends Activity implements SurfaceHolder.Callback
很好的Java面试题第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
添加组件后,在组件上添加图片 1.设置Table的Model这个需要重写AbstractTableModel类, ...设置Table的DefaultEditor,这个需要extends AbstractCellEditor implements TableCellEditor,ActionListener
public class PKCard extends JLabel implements MouseListener, MouseMotionListener{ //纸牌的位置 Point point = null; Point initPoint = null; int value = 0; int type = 0; String name = null; ...