网站推广和网站优化seo怎么读
引论 :
在面向对象设计中,要考虑的一个基本问题是“如何将变动的事物与保持不变的事物相互隔离”。这对程序库(library)而言尤为重要。该程序库的使用者(客户端程序员,client programmer)必须能够信赖他所使用的那部分程序库,并且能够知道如果程序库出现了新版本,他们并不需要改写代码。从另一个方面来说,程序库的开发者必须有权限进行修改和改进,并确保客户代码不会因为这些改动而受到影响。
这一目标可以通过达成协定来加以实现。例如,程序库开发者必须同意在改动程序库中的class时不得删除任何现有方法,因为那样会破坏客户端程序员的代码。但是,与之相反的情况会更加棘手。在有域存在的情况下,程序库开发者要怎样才能知道究竟都有哪些域已经被客户端程序员所调用了呢?这对于方法仅为类的实现的一部分,因此并不想让客户端程序员直接使用的情况来说同样如此。但如果程序开发者想要移除旧的实现而要添加新的实现时,结果将会怎样呢?改动任何一个成员都有可能破坏客户端程序员的代码。于是程序库开发者会手脚被缚,无法对任何事物进行改动。
为了解决这一问题,Java提供了访问权限修饰词(access specifier)供程序库开发人员来向客户端程序员指明哪些是可用的,哪些是不可用的。访问权限控制的等级,从最大权限到最小权限依次为:public,protected,包访问权限 (没有关键词),和 private。根据前述内容,你可能会认为,作为一名程序库设计员,你会尽可能将一切方法都定为private,而仅向客户端程序员公开你愿意让他们使用的方法。这样做是完全正确的,但是对于那些经常使用别的语言(特别是c语言)编写程序并在访问事物时不受任何限制的人而言,却是与他们的直觉相违背的。
不过,构件程序库(component library)的概念以及对于谁有权取用该程序库构件的控制都还是不完善的。其中仍旧存在着如何将构件捆绑到一个内聚的程序库单元中的问题。对于这一点,Java用关键字package加以控制,而访问权限会因类是存在于一个相同的包,还是存在于一个单独的包而受到影响。为此,要开始学习本章,你首先要学习如何将程序库构件置于包中,然后你就会理解访问权限修饰词的全部含义。
提问:
Java 中用到的线程调度算法是什么?
什么是线程组,为什么在 Java 中不推荐使用?
为什么使用 Executor 框架?
在 Java 中 Executor 和 Executors 的区别?
如何在 Windows 和 Linux 上查找哪个线程使用的 CPU 时间最长?
什么是原子操作?在 Java Concurrency API 中有哪些原子类
(atomic classes)?
Java Concurrency API 中的 Lock 接口(Lock interface)是什么?
对比同步它有什么优势?
什么是 Executors 框架?
什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队
列来实现生产者-消费者模型?
什么是 Callable 和 Future?
什么是 FutureTask?使用 ExecutorService 启动任务。
什么是并发容器的实现?