java - 无法理解变量 PizzaNum 的值变化

标签 java java-threads

在下面的代码中,我尝试制作 10 个 Pizzaz(当 pizzaNum 的值变为 10),然后通过不同的线程为它们提供服务(我只使用一个线程来解决问题),但只是在run 方法开始时,pizzaNum 的值变为0。为什么?我无法理解这一点。

public class NewDiningHall {
    static int pizzaNum; 
    static int studentID;

    public void makePizza() {
        pizzaNum++; 
    }

    static class PizzaServe extends Thread {
        public void run(){
            System.out.println("Before run "+pizzaNum);
            String result; 
            if (pizzaNum > 0) { 
               result = "Served "; 
               pizzaNum--; 
            } 
            else
                result = "Starved "; 
            System.out.println(pizzaNum+" "+result + studentID); 
            studentID++; 
        } 
    }

    public static void main(String[] args){ 
        NewDiningHall d = new NewDiningHall(); 
        for (int i = 1; i <= 10; i++) {
            d.makePizza();
        } 
        System.out.println(d.pizzaNum);
        PizzaServe t1 = new PizzaServe();
        t1.start();
    } 
}  

输出:

10
Before run 0
0 Starved 0

最佳答案

首先用

重命名
public class DiningHall {

并运行它,因为我已收到输出

10
Before run 10
9 Served 0

所以它有效!

再见

关于java - 无法理解变量 PizzaNum 的值变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194611/

相关文章:

java - 选择哪种数字签名算法供多平台使用?

Java多线程在同一个 block 中等待和通知

java - 我如何更改此方法以使用 ArrayList?

java - 如何让两个 JComboBox 具有相同的元素?

android - 在 onMessageReceived 中显示警报对话框 - FCM

java - Thread 类的 onSpinWait​() 方法 - Java 9

java - 如何优先考虑在信号量中等待的线程?

java - Threads之间划分一个奇数

java - 在 Map 中使用 NULL 作为键值

java - 可以使用 java 读取来电吗?