Java中用于同步的全局变量
我写的是JAVA中多人睡眠理发师问题的一个变体,每个顾客都有等待理发师的时间和理发的具体时间,此外,除了在没有顾客时睡觉之外,每个理发师在特定时间内为一定数量的顾客理发后睡觉 由于变化,我觉得需要一个全局变量来跟踪时间 我的问题是,如果我使用带有静态字段的全局类来跟踪时间,我会遇到任何问题吗?我已经读到,如果我的全局类变为“unload”,那么该值将变为null;这是什么时候发生的,在我的情况下会成为一个问题吗?如果是,我还有什么其他选择Java中用于同步的全局变量,java,global-variables,thread-synchronization,Java,Global Variables,Thread Synchronization,我写的是JAVA中多人睡眠理发师问题的一个变体,每个顾客都有等待理发师的时间和理发的具体时间,此外,除了在没有顾客时睡觉之外,每个理发师在特定时间内为一定数量的顾客理发后睡觉 由于变化,我觉得需要一个全局变量来跟踪时间 我的问题是,如果我使用带有静态字段的全局类来跟踪时间,我会遇到任何问题吗?我已经读到,如果我的全局类变为“unload”,那么该值将变为null;这是什么时候发生的,在我的情况下会成为一个问题吗?如果是,我还有什么其他选择 (我将在扩展Thread的主类中的“while”循环中增
(我将在扩展Thread的主类中的“while”循环中增加时间,同时扩展Thread的Customer和Barber类只需阅读即可。)这里有一个类似的问题:。 根据JLS 12.4.1,在下列事件之一发生后,将初始化class静态变量:
- 将创建该类的一个实例
- 调用该类的静态方法
- 指定了类的静态字段
- 使用非恒定静态场,或
- 对于顶级类,执行词汇嵌套在类中的assert语句
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();
}
}
公共类全局{
公共静态整数时间;
}
公共类MultipleSleepingBarber实现Runnable{
公开募捐{
Global.time=Global.time+1;
System.out.println(“时间是”+全局时间);
}
公共静态void main(字符串参数[]){
全局时间=0;
对于(int i=0;i<10;i++)
(新线程(新的MultipleSleepingBarber()).start();
}
}
“如果我的全局类变为“已卸载”,则除非您自己或依赖于可能执行此操作的框架,否则不会发生”。换句话说,如果你不做任何特别的事情,并且用java-jar正常运行你的应用程序,你会没事的。