无法理解变量pizzaNum的值变化

时间:2015-07-02 21:03:58

标签: 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
  在跑0之前   0饥饿0

1 个答案:

答案 0 :(得分:1)

首先用

重命名
public class DiningHall {

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

10
Before run 10
9 Served 0

所以它有效!

再见