java同步代码块的问题

public class ThreadTest implements Runnable {
    public void run() {

        int tickets = 5;
        while (true) {
            synchronized (this) {// 同步代码块
                if (tickets <= 0)
                    break;
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.getStackTrace();
                }
                System.out.println(Thread.currentThread().getName() + "出售票" + tickets);
                tickets -= 1;
            }
         }

      }

}

上面是类,使用了同步锁,

public class MapTest {
    public static void main(String[] args) {
        
        ThreadTest t=new ThreadTest();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();    
        System.out.println("主线程!");
    }
}

下面是主程序

为什么运行的结果还是这样??

主线程!
Thread-0出售票5
Thread-0出售票4
Thread-0出售票3
Thread-0出售票2
Thread-0出售票1
Thread-2出售票5
Thread-2出售票4
Thread-2出售票3
Thread-2出售票2
Thread-2出售票1
Thread-1出售票5
Thread-1出售票4
Thread-1出售票3
Thread-1出售票2
Thread-1出售票1

package com.auskat.demo.lock;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 类文件: ThreadTest
 * <p>
 * <p>
 * 类描述:
 * <p>
 * 作     者: AusKa_T
 * <p>
 * 日     期: 2021/5/20 0020
 * <p>
 * 时     间: 15:40
 * <p>
 */
public class ThreadTest  implements Runnable {

    private  int  tickets = 5;

    ReentrantLock lock= new ReentrantLock();

    @Override
    public void run() {
        while (tickets>0){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            lock.lock();
            sale();
            lock.unlock();
        }
    }
    public  void sale(){

        if (tickets>0){
            System.out.println(Thread.currentThread().getName()+"正在出售第"+(5-tickets+1)+"张票");
            tickets--;
        }


    }

}

 

主线程!
Thread-0正在出售第1张票
Thread-2正在出售第2张票
Thread-1正在出售第3张票
Thread-1正在出售第4张票
Thread-2正在出售第5张票