阅读以下函数说明和Java代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。

admin2014-10-11  38

问题 阅读以下函数说明和Java代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
很多时候,希望某些类只有一个或有限的几个实例,典型解决方案是所谓单身(Singleton)模式。但在多线程情况下,Singleton模式有可能出现问题,需要进行同步检查。如果对“检查singleton对象是否已经创建”进行同步,则存在严重的瓶颈,所有的线程都必须等待检查对象是否存在。解决方式是一种称为Double-checked—Locking模式,其意图是将非必须的锁定优化掉,同步检查最多只发生一次,因此不会成为瓶颈。以下是Java语言实现,能够正确编译通过。
    [Java代码]
    public class USTax(
    private static USTax instance=null;
    (1)USTax(){)
  private旦static void doSync(){
    if(instance==null){
    System.out.println(“实例不存在,创建实例...”);
    instance=(3);
    System.out.printin(”实例创建成功”);
    }else{
    System.out.println(“实例己被创建了”);
    }
    PubliC static USTax getInstance()(
    if(instance==null){
    System.out.printin(“实例暂时不存在”);
    (4)//同步控制
    }else{
    System.out.printin(“实例已经存在”);
    return(5);
    }
    }

选项

答案(1)private (2)synchronized (3)newUSTax() (4)doSync(1 (5)instance

解析 在这里希望USTax类只有一个实例,从而需要将其构造函数设置为private,以防止外部对这个类进行直接实例化。故空(1)应填private。方法doSync是进行同步控制,因此应声明为synchronized,即空(2)应填synchronized。空(3)是创建一个USTax实例,应填newUSTax()。空(4)处要进行同步控制,故此处应调用同步函数doSync0,故空(4)应填doSync0.空(5)返回引用,应填instance。
转载请注明原文地址:https://kaotiyun.com/show/raDZ777K
0

相关试题推荐
最新回复(0)