`
文章列表
文章出处,转自:http://blog.csdn.net/cenwenchu79/archive/2009/09/24/4586939.aspx     引问:NIO在服务端的应用已经被广为熟悉,但是在客户端的使用,其实给予的指导并不多。同时在我看来,NIO在客户端使用就是原来的长连接模式加上事件驱动的框架,而相对于短连接池模式来说,性能是否真的在任何环境都那么突出,其实不然。  最近正好要优化TB的Cache客户端,原始代码是用NIO写的,但是效率不高,性能也一般,因此反而拖累了服务端的表现,在整个优化过程中,看了NIO2,也就是JDK7中比较突出的AIO,同时也经过反复优化和测试,其 ...
示例代码如下: import java.util.*; import static java.util.concurrent.TimeUnit.SECONDS; /** * OutOfTime * <p/> * Class illustrating confusing Timer behavior * * @author Brian Goetz and Tim Peierls */ public class OutOfTime { public static void main(String[] args) throws ...
并发诀窍清单如下:
安全发布模式  
代码清单1: public class StuffIntoPublic { public Holder holder; public void initialize() { holder = new Holder(42); } }   代码清单2: public class Holder { private int n; public Holder(int n) { this.n = n; } public void assertSanity() { ...
volatile变量   volatile变量是一种同步的弱形式。它确保对一个变量的更新以可预见的方式告知其他的线程。当一个域声明为volatile类型后,编译器与运行时会监视这个变量:它是共享的,而且对它的操作不会与其他的内存 ...
代码示例: public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread { public void run() { while (!ready) Thread.yield(); System.out.println(number); } ...
最全的浏览器兼容性参考文章 : http://roozeno.blogbus.com/logs/3560080.html http://edu.cooltong.com.cn/html/css/csshack/2009/0608/9756.html http://blog.csdn.net/herojams/archive/2009/07/01/4311884.aspx
注意,有一点很有意思,当使用“.class”来创建对Class对象的引用时,不会自动地初始化该Class对象。   为了使用类而做的准备工作实际包含三个步骤: 1.加载 。这是由类加载器执行的。该步骤将查找字节码,并从这些字节码中创建一个Class对象。 2.链接 。这个阶段将验证类中的字节码,为静态域分配存储空间,并且如果必需的话,将解析这个类创建的对其他类的所有引用。 3.初始化 。如果该类具有超类,则对其进行初始化,执行静态初始化器和静态初始化块。     初始化被延迟到对静态方法(构造器隐式地是静态的)或者非常数静态域进行首次引用时才执行 ...
通用的清理惯用法基本规则:在创建需要清理的对象之后,立即进入一个try-finally 语句块!   // Each disposable object must be followed by a try-finally class NeedsCleanupExceptions { // Construction can't fail private static long counter = 1; private final ...
class VeryImportantException extends Exception { public String toString() { return "A very important exception!"; } } class HoHumException extends Exception { public String toString() { return "A trivial exception"; } } public class LostMessage { v ...

初始化顺序

初始化的实际过程: 1.在其他任何事物发生之前,将分配给对象的存储空间初始化成二进制的0。 2.调用基类构造器。(这个步骤会不断反复递归下去,首先是构造这种层次结构的根,然后是下一层子类,等等,直到最低层的子类) 3.按声明顺序调用成员的初始化方法。 4.调用子类的构造器主体。 构造器内部的多态方法的行为   class Glyph { void draw() { print("Glyph.draw()"); } Glyph() { System.out.println("Gly ...
只有普通的方法调用可以是多态的。 1.直接访问某个域,这个访问将在编译期进行解析。 示例: class Super { public int field = 0; public int getField() { return field; } } class Sub extends Super { public int field = 1; public int getField() { return field; } public int getSuperField() { return super.field; } } ...
public class PrivateOverride { private void f() { System.out.println("private f()"); } public static void main(String[] args) { PrivateOverride po = new DerivedClass(); po.f(); } } class DerivedClass extends PrivateOverride { public void f() { System.out.println(&q ...
      在进行基准测试操作时,一定要对出现意外结果有思想准备。即使您认为自己知道会是什么样的结果,可是奇怪的结果常常会让您无所适从。性能专家 Jack Shirazi 和 Kirk Pepperdine 一直在与意外结果打交道。请跟他们一起对 ...
Global site tag (gtag.js) - Google Analytics