在同步块中加入sleep为什么会出现线程不安全呢?

在同步块中加入sleep为什么会出现线程不安全呢?

public class TestBuyTickets implements Runnable{

    //票的数量
    private Integer tickets = 100;
    //停止线程的标识符
    private boolean flag = true;
    
    @Override
    public void run() {
            try {
                while (flag) {
                    // 买票
                    buy();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        
    }
    
    public void buy() throws InterruptedException {
        // 锁住票数
        synchronized (tickets) {
            // 如果票没了 则标识符变false
            if (tickets <= 0) {
                flag = false;
                return;
            }
               //延时
              Thread.sleep(10);
            System.out.println(Thread.currentThread().getName() + "买到了" + tickets--);
        }
    }
public static void main(String[] args) throws InterruptedException {
        TestBuyTickets tickets = new TestBuyTickets();
        new Thread(tickets,"小明").start();
        new Thread(tickets,"小红").start();
        new Thread(tickets,"小吴").start();
}
}

小明买到了100
小吴买到了99
小明买到了99
小吴买到了98
小红买到了98
小明买到了97
小吴买到了97
小红买到了96
小明买到了96
小吴买到了95
小红买到了95
小吴买到了94
小明买到了94
小红买到了93
小吴买到了93
小明买到了92
小红买到了92
小明买到了91
小吴买到了91
小明买到了90
小红买到了90
小吴买到了89
小明买到了89
小吴买到了88
小红买到了88
小吴买到了87
小明买到了86
小吴买到了85
小红买到了84
小吴买到了83
小明买到了83
小红买到了81
小吴买到了82
小明买到了80
小红买到了80
小明买到了79
小吴买到了78
小明买到了77
小红买到了76
小吴买到了75
小明买到了75
小红买到了74
小吴买到了74
小明买到了73
小红买到了73
小吴买到了72
小明买到了72
小吴买到了71
小红买到了71
小明买到了69
小吴买到了70
小明买到了68
小红买到了68
小吴买到了67
小明买到了67
小吴买到了66
小红买到了66
小明买到了65
小吴买到了65
小明买到了64
小红买到了64
小明买到了63
小吴买到了63
小红买到了62
小明买到了62
小红买到了61
小吴买到了61
小红买到了60
小明买到了59
小红买到了58
小吴买到了57
小红买到了56
小明买到了55
小吴买到了54
小红买到了54
小明买到了53
小吴买到了52
小红买到了51
小明买到了50
小红买到了49
小吴买到了49
小红买到了48
小明买到了47
小红买到了46
小吴买到了45
小明买到了44
小红买到了44
小明买到了43
小吴买到了42
小明买到了41
小红买到了40
小明买到了39
小吴买到了38
小明买到了37
小红买到了36
小明买到了35
小吴买到了35
小明买到了34
小红买到了33
小吴买到了32
小明买到了32
小吴买到了31
小红买到了30
小明买到了29
小吴买到了28
小红买到了27
小明买到了26
小红买到了24
小吴买到了25
小红买到了23
小明买到了22
小红买到了21
小吴买到了21
小红买到了19
小明买到了20
小红买到了18
小吴买到了17
小红买到了16
小明买到了16
小吴买到了15
小红买到了15
小明买到了14
小吴买到了14
小明买到了13
小红买到了12
小明买到了11
小吴买到了11
小明买到了10
小红买到了9
小明买到了8
小吴买到了8
小红买到了7
小明买到了7
小红买到了6
小吴买到了5
小明买到了4
小红买到了4
小吴买到了2
小明买到了3
小吴买到了1
小红买到了1

如果把同步块里的sleep删除 则运行结果是对的,这是为什么“?