`
12616383
  • 浏览: 51238 次
  • 性别: Icon_minigender_1
  • 来自: 待定
社区版块
存档分类
最新评论
文章列表
记下来,很重要。 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。      二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。      三、尤其关键的是,当一个线程访问object ...
    1 Bundle 是OSGI中的模块,其生命周期是被OSGI框架所管理。形式上讲是一个jar包。META-INF目录下的 MANIFEST.MF文件中是对Bundle的特定描述。 Budle 的状态:INSTALLED、RESOLVED、UNINSTALLED、STARTING、ACTIVE、STOPPING。 Bundle 是服务(Service)  和 组件 (component)的载体。 每个Bundle都有自己独立于其他Bundle 的 ClassLoader,正因为如此,各个Bundle内部的类是隔离的。     2 Bundle 直接交互的实现方式: a:通 ...
7.避免使用终结方法 finalizer 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的。使用终结方法会导致行为不稳定,降低性能,以及可移植性问题。   正确终结方法: 提供显性终止方法,try-finally    终结方法的两种合法用途: 1 当对象的所有者调用前面段落的显示终止方法时,终结方法可以充当“安全网”。如果终结方法发现资源还未被终止,则应该在日志中记录一条警告。   2 与对象的本地对等体有关。
 6.消除过期的对象引用   例子: public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e){ ensureCapacity(); ...
5 避免创建不必要的对象         一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象。重用的方式即快速,又流程。如果对象是不可变的,他就始终可以被重用。     对于只需要实例化一次的对象,可以使用静态初始化器。static{} 优先使用基本类型而不是装箱基本类型(基本类型:long;  装箱基本类型:Long)   public static void main(String[] args) { //使用Long 时,每次sum增加long时都要构造一个实例 //耗时:Long 43秒,long 6.8秒 //Lon ...
4.通过私有化构造器强化不可实例化的能力   当编写的工具类只包换静态方法和静态域,并且不希望被实例化,因为实例对它没有任何意义。可以通过构造私有化构造器来避免类被实例化。   注: 1 企图将类做成抽象类来强制该类不可被实例化,这是行不通的。该类可以被子类化,并且该子类也可以被实例化。 2 必须使用私有构造器,不能使用显性构造器或者不包含构造器。(当类不包含显性构造器时,编译器会生成缺省的构造器) 3 使用私有化构造器的类不能被子类化。     public class PrivateConstructor { private static vo ...
先看下面这样的困惑: 最近了解了几个MVC的框架,其中有两个是公司内部的。发现这些东西都是类似的,从处理逻辑到页面渲染;从service到layout;配置的实现无非就是XML,或者annotation……我有种感觉,兴许已经跳不出这个思 ...
    public class TestConstruct { private final int serviceSize; private final int servings; private final int cal; private final String fat; private final boolean istrue; public static class Builder { private final int serviceSize; private final int servings; private  in ...
在剖析该问题前请看如下代码public static String bytes2HexString(byte[] b) {  String ret = "";  for (int i = 0; i < b.length; i++) {   String hex = Integer.toHexString(b[ i ] & 0xFF);   if (hex.length() == 1) {
  常量:在编译初期就确定的既为常量      java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节 ...
希尔排序:   实际上是基于插入排序的,在插入排序中相比较的是相邻的两个元素,但是如果一个很小的数在数组的最右端,而他本应该是在最左端的,这样的话所有中间的元素都要向右移动一位,并且执行了N次。希尔排序就是首先对大跨度的元素做比较并且进行移动,这样的久相对有序了,再在这个基础上进行普通的插入排序,效率就会高很多。   效率:   快速排序>希尔排序>简单排序 希尔排序在最坏的执行效率上和平均的执行效率上没有差很多。   <!--StartFragment -->    public class ShellSort { public stat ...
递归原理:大部分编译器都是使用栈来实现递归的,当调用一个方法的时候编译器会将参数和返回地址压入栈中,然后把控制转移给这个方法,当方法返回时,这些值退栈,参数小时。   下面是模拟的递归的过程: package digui; ...
public class AnagarmApp { static int size; static int count; static char[] arrChar = new char[100]; public static void main(String[] args) { String input = "cat"; size = input.length(); count = 0; for (int j = 0; j < size; j++){ arrChar[j] = input.charAt( ...
方法模式:   什么是方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法可以使子类可以不改变一个 算法的结构即可以重定义该算法的某些特定步骤。     方法模式的特点:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。   当不变的和可变的行为在方法中混合在一起时,不变的行为就会在子类中重复出现,模板方法模式就是将这些不变的 行为搬移到一个超类中,避免重复代码。   //模板模式,将通用的抽象到父类,将个别不同的处理交由继承的子类实现 //父类就是模板。 /** * 当我们要完成某一细节层次一致的一个过程或者一系列的步骤,但是某个个 ...
链表栈与链表队列   链表实现的栈和队列,这里只展示实现过程,有不明的地方可以参看我的前面关于栈,队列和列表的说明     //栈:先进后出 class LinkStack{ public static void main(String[] args) { LinkStack l = new LinkStack(); l.push(1); l.push(2); l.push(3); l.displayStack(); l.pop(); l.displayStack(); } public Link first; p ...
Global site tag (gtag.js) - Google Analytics