java线程同步问题,大神帮我看看

 package com.fs.hczhang;

public class AAA {
    public static void main(String[] args) {

        Windows w1 = new Windows();
        Windows w2 = new Windows();
        Windows w3 = new Windows();

        w1.start();
        w2.start();
        w3.start();

    }
}

class Window implements Runnable {
    int num = 10;

    @Override
    public void run() {
        while (true) {
            if (!sale()) {
                break;
            }
        }
    }

    public boolean sale() {
        if (num > 0) {
            System.out.println(Thread.currentThread().getId() + " : 卖一张票");
            num--;
            return true;
        } else {
            return false;
        }
    }
}

class Windows extends Thread {
    static int num = 10;

    public void run() {
        while (true) {
            if (!sale()) {
                break;
            }
        }
    }

    public boolean sale() {
        if (num > 0) {
            System.out.println(Thread.currentThread().getId() + " : 卖一张票");
            num--;
            return true;
        } else {
            return false;
        }
    }
}


线程同步问题,帮我把修改代码带注释发上来,谢谢

package com.fs.hczhang;

public class TestThread {
public static void main(String[] args) {

    Windows w1 = new Windows();
    Windows w2 = new Windows();
    Windows w3 = new Windows();

    w1.start();
    w2.start();
    w3.start();

}

}

class Window implements Runnable {
int num = 10;

@Override
public void run() {
    while (true) {
        if (!sale()) {
            break;
        }
    }
}

public boolean sale() {
    if (num > 0) {
        System.out.println(Thread.currentThread().getId() + " : 卖一张票");
        num--;
        return true;
    } else {
        return false;
    }
}

}

class Windows extends Thread {
static int num = 10;

public void run() {
    while (true) {
        if (!sale()) {
            break;
        }
    }
}

public synchronized static boolean sale() {
    if (num > 0) {
        System.out.println(Thread.currentThread().getId() + " : 卖一张票");
        num--;
        return true;
    } else {
        return false;
    }
}

}