阅读以下函数说明和Java代码,将应填入 (n) 处的字句写在对应栏内。
[说明]
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-Checked-Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
[Java代码]
public class USTax {
private static USTax instance=null;
(1) USTax( ){}
private (2) static void doSync( ){
if(instance==null){
System.out.println("实例不存在,创建实例..");
instance= (3) ;
System.out.println("实例创建成功");
}else{
System.out.println("实例已被创建了");
}
}
public static USTax getInstance( ){
if(instance==null){
System.out.println("实例暂时不存在");
(4) ;//同步控制
}else{
System.out.println("实例已经存在");
}
return (5) ;
}
}
阅读以下说明和Java代码,将应填入 (n) 处的字句写在对应栏内。
[说明]
在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(连不用的功能)都要全面初始化的话,会连带影响到应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。
以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法——设置名称和取得名称,需要真正执行“重”的方法——真正打印——时才初始Print类。图6-1显示了各个类间的关系。
[图6-1]
[*]
[Java代码]
//Printable.Java
publiC (1) Printable
public abstract void setPrinterName(String name);
public abstract String getprinterName( );
public abstract void print(String string);
//Printer.Java
public class Printer implements Printable
private String name;
public Printer( )
System.out.println("正在产生Printer的对象实例");
public Printer(String name)
this.name=name;
heavyJob("正在产生Printer的对象实例("+name+")");
public void setPrinterName(String name)
我来回答: