0

我正在用 JAVA 编写多个睡眠理发师问题的变体,其中每个客户都有等待理发师的容忍时间和理发的特定时间,此外,除了在没有客户的情况下睡觉之外,每个理发师在给一定数量的顾客剪头发特定时间后睡觉。

由于变化,我觉得需要一个跟踪时间的全局变量。

我的问题是,如果我使用带有静态字段的 Global 类来跟踪时间,我会遇到任何问题吗?我已经读过,如果我的全局类变得“卸载”,则该值将变为空;这种情况什么时候发生,对我来说会是个问题吗?如果是,我还有什么其他选择?

(我会在扩展 Thread 的主类中的“while”循环中增加时间,而扩展线程的 Customer 和 Barber 类只需要阅读它)。

4

1 回答 1

0

这是一个类似的问题:当静态类初始化时。并且基于 JLS 12.4.1,类静态变量将在以下事件之一发生后被初始化:

  • 创建了一个类的实例
  • 调用类的静态方法
  • 分配了类的静态字段,
  • 使用非常量静态字段,或
  • 对于顶级类,执行词法嵌套在类中的断言语句。

因此,在您的情况下,我想您需要确保在通过简单的分配进入该 while 循环之前分配了全局时间变量,例如

public class Global {
  public static int time;
}

public class MultipleSleepingBarber implements Runnable {

  public void run() {
    Global.time = Global.time + 1;
    System.out.println("Time is " + Global.time);
  }

  public static void main(String args[]) {
    Global.time = 0;
    for (int i = 0; i < 10; i++)
      (new Thread(new MultipleSleepingBarber())).start();
  }

}
于 2013-06-09T08:44:03.103 回答